版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!觸摸事件講師:李南江北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!iOS中的事件在用戶使用app過程中,會(huì)產(chǎn)生各種各樣的事件iOS中的事件可以分為3大類型觸摸事件加速計(jì)事件遠(yuǎn)程控制事件北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!響應(yīng)者對(duì)象在iOS中不是任何對(duì)象都能處理事件,只有繼承了UIResponder的對(duì)象才能接收并處理事件。我們稱之為“響應(yīng)者對(duì)象”UIApplication、UIViewController、UIView都繼承自UIResponder,因此它們都是響應(yīng)者對(duì)象,都能夠接收并處理事件北京傳智
2、播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!UIResponderUIResponder內(nèi)部提供了以下方法來處理事件觸摸事件- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;- (void)touchesCancelled:(NSSet *)touches withE
3、vent:(UIEvent *)event;加速計(jì)事件- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event;遠(yuǎn)程控制事件- (void)remoteControlReceivedWithEvent:(UIEvent *)eve
4、nt;北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!UIView的觸摸事件處理UIView是UIResponder的子類,可以覆蓋下列4個(gè)方法處理不同的觸摸事件一根或者多根手指開始觸摸view,系統(tǒng)會(huì)自動(dòng)調(diào)用view的下面方法- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event一根或者多根手指在view上移動(dòng),系統(tǒng)會(huì)自動(dòng)調(diào)用view的下面方法(隨著手指的移動(dòng),會(huì)持續(xù)調(diào)用該方法)- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event一根或者多根手指離
5、開view,系統(tǒng)會(huì)自動(dòng)調(diào)用view的下面方法- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event觸摸結(jié)束前,某個(gè)系統(tǒng)事件(例如電話呼入)會(huì)打斷觸摸過程,系統(tǒng)會(huì)自動(dòng)調(diào)用view的下面方法- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event提示:touches中存放的都是UITouch對(duì)象北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!UITouch當(dāng)用戶用一根觸摸屏幕時(shí),會(huì)創(chuàng)建一個(gè)與手指相關(guān)聯(lián)的UITouch對(duì)象一根手指對(duì)應(yīng)一個(gè)UITouch
6、對(duì)象UITouch的作用保存著跟手指相關(guān)的信息,比如觸摸的位置、時(shí)間、階段當(dāng)手指移動(dòng)時(shí),系統(tǒng)會(huì)更新同一個(gè)UITouch對(duì)象,使之能夠一直保存該手指在的觸摸位置當(dāng)手指離開屏幕時(shí),系統(tǒng)會(huì)銷毀相應(yīng)的UITouch對(duì)象提示:iPhone開發(fā)中,要避免使用雙擊事件!北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!UITouch的屬性觸摸產(chǎn)生時(shí)所處的窗口property(nonatomic,readonly,retain) UIWindow *window;觸摸產(chǎn)生時(shí)所處的視圖property(nonatomic,readonly,retain) UIView *view;短時(shí)間內(nèi)點(diǎn)按屏幕的次數(shù),可以根據(jù)ta
7、pCount判斷單擊、雙擊或更多的點(diǎn)擊property(nonatomic,readonly) NSUInteger tapCount;記錄了觸摸事件產(chǎn)生或變化時(shí)的時(shí)間,單位是秒property(nonatomic,readonly) NSTimeInterval timestamp;當(dāng)前觸摸事件所處的狀態(tài)property(nonatomic,readonly) UITouchPhase phase;北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!UITouch的方法- (CGPoint)locationInView:(UIView *)view; 返回值表示觸摸在view上的位置 這里返回的位置
8、是針對(duì)view的坐標(biāo)系的(以view的左上角為原點(diǎn)(0, 0)) 調(diào)用時(shí)傳入的view參數(shù)為nil的話,返回的是觸摸點(diǎn)在UIWindow的位置- (CGPoint)previousLocationInView:(UIView *)view; 該方法記錄了前一個(gè)觸摸點(diǎn)的位置北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!UIEvent每產(chǎn)生一個(gè)事件,就會(huì)產(chǎn)生一個(gè)UIEvent對(duì)象UIEvent:稱為事件對(duì)象,記錄事件產(chǎn)生的時(shí)刻和類型常見屬性事件類型property(nonatomic,readonly) UIEventType type;property(nonatomic,readonly) UI
9、EventSubtype subtype;事件產(chǎn)生的時(shí)間property(nonatomic,readonly) NSTimeInterval timestamp;UIEvent還提供了相應(yīng)的方法可以獲得在某個(gè)view上面的觸摸對(duì)象(UITouch)北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!touches和event參數(shù)一次完整的觸摸過程,會(huì)經(jīng)歷3個(gè)狀態(tài):觸摸開始:- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event觸摸移動(dòng):- (void)touchesMoved:(NSSet *)touches withEven
10、t:(UIEvent *)event觸摸結(jié)束:- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event觸摸取消(可能會(huì)經(jīng)歷):- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event4個(gè)觸摸事件處理方法中,都有NSSet *touches和UIEvent *event兩個(gè)參數(shù)一次完整的觸摸過程中,只會(huì)產(chǎn)生一個(gè)事件對(duì)象,4個(gè)觸摸方法都是同一個(gè)event參數(shù)如果兩根手指同時(shí)觸摸一個(gè)view,那么view只會(huì)調(diào)用一次touchesBegan:with
11、Event:方法,touches參數(shù)中裝著2個(gè)UITouch對(duì)象如果這兩根手指一前一后分開觸摸同一個(gè)view,那么view會(huì)分別調(diào)用2次touchesBegan:withEvent:方法,并且每次調(diào)用時(shí)的touches參數(shù)中只包含一個(gè)UITouch對(duì)象根據(jù)touches中UITouch的個(gè)數(shù)可以判斷出是單點(diǎn)觸摸還是多點(diǎn)觸摸北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!事件的產(chǎn)生和傳遞發(fā)生觸摸事件后,系統(tǒng)會(huì)將該事件加入到一個(gè)由UIApplication管理的事件隊(duì)列中UIApplication會(huì)從事件隊(duì)列中取出最前面的事件,并將事件分發(fā)下去以便處理,通常,先發(fā)送事件給應(yīng)用程序的主窗口(keyWin
12、dow)主窗口會(huì)在視圖層次結(jié)構(gòu)中找到一個(gè)最合適的視圖來處理觸摸事件,這也是整個(gè)事件處理過程的第一步找到合適的視圖控件后,就會(huì)調(diào)用視圖控件的touches方法來作具體的事件處理touchesBegantouchesMovedtouchedEnded北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!事件傳遞示例122343觸摸事件的傳遞是從父控件傳遞到子控件點(diǎn)擊了綠色的view:UIApplication - UIWindow - 白色 - 綠色點(diǎn)擊了藍(lán)色的view:UIApplication - UIWindow - 白色 - 橙色 - 藍(lán)色點(diǎn)擊了黃色的view:UIApplication - UIW
13、indow - 白色 - 橙色 - 藍(lán)色 - 黃色如果父控件不能接收觸摸事件,那么子控件就不可能接收到觸摸事件(掌握)如何找到最合適的控件來處理事件?自己是否能接收觸摸事件?觸摸點(diǎn)是否在自己身上?從后往前遍歷子控件,重復(fù)前面的兩個(gè)步驟如果沒有符合條件的子控件,那么就自己最適合處理北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!UIView不接收觸摸事件的三種情況1.不接收用戶交互userInteractionEnabled = NO2.隱藏hidden = YES3.透明alpha = 0.0 0.01提示:UIImageView的userInteractionEnabled默認(rèn)就是NO,因此UI
14、ImageView以及它的子控件默認(rèn)是不能接收觸摸事件的北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!觸摸事件處理的詳細(xì)過程用戶點(diǎn)擊屏幕后產(chǎn)生的一個(gè)觸摸事件,經(jīng)過一些列的傳遞過程后,會(huì)找到最合適的視圖控件來處理這個(gè)事件找到最合適的視圖控件后,就會(huì)調(diào)用控件的touches方法來作具體的事件處理touchesBegantouchesMovedtouchedEnded這些touches方法的默認(rèn)做法是將事件順著響應(yīng)者鏈條向上傳遞,將事件交給上一個(gè)響應(yīng)者進(jìn)行處理北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!響應(yīng)者鏈條示意圖北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!響應(yīng)者鏈的事件傳遞過程1.如果view的
15、控制器存在,就傳遞給控制器;如果控制器不存在,則將其傳遞給它的父視圖2.在視圖層次結(jié)構(gòu)的最頂級(jí)視圖,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對(duì)象進(jìn)行處理3.如果window對(duì)象也不處理,則其將事件或消息傳遞給UIApplication對(duì)象4.如果UIApplication也不能處理該事件或消息,則將其丟棄北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!監(jiān)聽觸摸事件的做法如果想監(jiān)聽一個(gè)view上面的觸摸事件,之前的做法是 自定義一個(gè)view 實(shí)現(xiàn)view的touches方法,在方法內(nèi)部實(shí)現(xiàn)具體處理代碼通過touches方法監(jiān)聽view觸摸事件,有很明顯的幾個(gè)缺點(diǎn) 必須得自定
16、義view 由于是在view內(nèi)部的touches方法中監(jiān)聽觸摸事件,因此默認(rèn)情況下,無法讓其他外界對(duì)象監(jiān)聽view的觸摸事件 不容易區(qū)分用戶的具體手勢(shì)行為iOS 3.2之后,蘋果推出了手勢(shì)識(shí)別功能(Gesture Recognizer),在觸摸事件處理方面,大大簡(jiǎn)化了開發(fā)者的開發(fā)難度北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!UIGestureRecognizer為了完成手勢(shì)識(shí)別,必須借助于手勢(shì)識(shí)別器-UIGestureRecognizer利用UIGestureRecognizer,能輕松識(shí)別用戶在某個(gè)view上面做的一些常見手勢(shì)UIGestureRecognizer是一個(gè)抽象類,定義了所有手
17、勢(shì)的基本行為,使用它的子類才能處理具體的手勢(shì)UITapGestureRecognizer(敲擊)UIPinchGestureRecognizer(捏合,用于縮放)UIPanGestureRecognizer(拖拽)UISwipeGestureRecognizer(輕掃)UIRotationGestureRecognizer(旋轉(zhuǎn))UILongPressGestureRecognizer(長(zhǎng)按)北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!UITapGestureRecognizer每一個(gè)手勢(shì)識(shí)別器的用法都差不多,比如UITapGestureRecognizer的使用步驟如下創(chuàng)建手勢(shì)識(shí)別器對(duì)象UI
18、TapGestureRecognizer *tap = UITapGestureRecognizer alloc init;設(shè)置手勢(shì)識(shí)別器對(duì)象的具體屬性/ 連續(xù)敲擊2次tap.numberOfTapsRequired = 2;/ 需要2根手指一起敲擊tap.numberOfTouchesRequired = 2;添加手勢(shì)識(shí)別器到對(duì)應(yīng)的view上self.iconView addGestureRecognizer:tap;監(jiān)聽手勢(shì)的觸發(fā)tap addTarget:self action:selector(tapIconView:);北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!手勢(shì)識(shí)別的狀態(tài)typedef NS_ENUM(NSInteger, UIGestureRecognizerState) / 沒有觸摸事件發(fā)生,所有手勢(shì)識(shí)別的默認(rèn)狀態(tài) UIGestureRecognizerStatePossible, / 一個(gè)手勢(shì)已經(jīng)開始但尚未改變或者完成時(shí) UIGestureRecognizerStateBegan, / 手勢(shì)狀態(tài)改
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州大學(xué)《行政監(jiān)督學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州財(cái)經(jīng)大學(xué)《生物制藥綜合實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽學(xué)院《裝飾材料構(gòu)造與人體工程學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025江西建筑安全員C證考試(專職安全員)題庫附答案
- 2025青海建筑安全員B證考試題庫及答案
- 2025年四川建筑安全員C證考試題庫
- 貴陽信息科技學(xué)院《機(jī)械原理(實(shí)驗(yàn))》2023-2024學(xué)年第一學(xué)期期末試卷
- 硅湖職業(yè)技術(shù)學(xué)院《工業(yè)發(fā)酵分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025貴州省建筑安全員《A證》考試題庫
- 廣州新華學(xué)院《實(shí)驗(yàn)設(shè)計(jì)與數(shù)據(jù)處理》2023-2024學(xué)年第一學(xué)期期末試卷
- 《中國(guó)近現(xiàn)代史綱要(2023版)》課后習(xí)題答案合集匯編
- 家庭管理量表(FaMM)
- 腰椎間盤突出癥的射頻治療
- 2023屆河南省洛陽市平頂山市許昌市濟(jì)源市高三一模語文試題
- 【超星爾雅學(xué)習(xí)通】《老子》《論語》今讀網(wǎng)課章節(jié)答案
- 配電箱采購(gòu)技術(shù)要求
- 上海外國(guó)語大學(xué)附屬外國(guó)語學(xué)校2020-2021七年級(jí)下學(xué)期期中英語試卷+答案
- 綠色施工措施措施 四節(jié)一環(huán)保
- TCSES 71-2022 二氧化碳地質(zhì)利用與封存項(xiàng)目泄漏風(fēng)險(xiǎn)評(píng)價(jià)規(guī)范
- GB/T 8561-2001專業(yè)技術(shù)職務(wù)代碼
- GB/T 7661-2009光學(xué)零件氣泡度
評(píng)論
0/150
提交評(píng)論