版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!觸摸事件講師:李南江北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!iOS中的事件在用戶使用app過程中,會產(chǎn)生各種各樣的事件iOS中的事件可以分為3大類型觸摸事件加速計(jì)事件遠(yuǎn)程控制事件北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!響應(yīng)者對象在iOS中不是任何對象都能處理事件,只有繼承了UIResponder的對象才能接收并處理事件。我們稱之為“響應(yīng)者對象”UIApplication、UIViewController、UIView都繼承自UIResponder,因此它們都是響應(yīng)者對象,都能夠接收并處理事件北京傳智
2、播客教育 高級軟件人才實(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;北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!UIView的觸摸事件處理UIView是UIResponder的子類,可以覆蓋下列4個方法處理不同的觸摸事件一根或者多根手指開始觸摸view,系統(tǒng)會自動調(diào)用view的下面方法- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event一根或者多根手指在view上移動,系統(tǒng)會自動調(diào)用view的下面方法(隨著手指的移動,會持續(xù)調(diào)用該方法)- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event一根或者多根手指離
5、開view,系統(tǒng)會自動調(diào)用view的下面方法- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event觸摸結(jié)束前,某個系統(tǒng)事件(例如電話呼入)會打斷觸摸過程,系統(tǒng)會自動調(diào)用view的下面方法- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event提示:touches中存放的都是UITouch對象北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!UITouch當(dāng)用戶用一根觸摸屏幕時,會創(chuàng)建一個與手指相關(guān)聯(lián)的UITouch對象一根手指對應(yīng)一個UITouch
6、對象UITouch的作用保存著跟手指相關(guān)的信息,比如觸摸的位置、時間、階段當(dāng)手指移動時,系統(tǒng)會更新同一個UITouch對象,使之能夠一直保存該手指在的觸摸位置當(dāng)手指離開屏幕時,系統(tǒng)會銷毀相應(yīng)的UITouch對象提示:iPhone開發(fā)中,要避免使用雙擊事件!北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!UITouch的屬性觸摸產(chǎn)生時所處的窗口property(nonatomic,readonly,retain) UIWindow *window;觸摸產(chǎn)生時所處的視圖property(nonatomic,readonly,retain) UIView *view;短時間內(nèi)點(diǎn)按屏幕的次數(shù),可以根據(jù)ta
7、pCount判斷單擊、雙擊或更多的點(diǎn)擊property(nonatomic,readonly) NSUInteger tapCount;記錄了觸摸事件產(chǎn)生或變化時的時間,單位是秒property(nonatomic,readonly) NSTimeInterval timestamp;當(dāng)前觸摸事件所處的狀態(tài)property(nonatomic,readonly) UITouchPhase phase;北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!UITouch的方法- (CGPoint)locationInView:(UIView *)view; 返回值表示觸摸在view上的位置 這里返回的位置
8、是針對view的坐標(biāo)系的(以view的左上角為原點(diǎn)(0, 0)) 調(diào)用時傳入的view參數(shù)為nil的話,返回的是觸摸點(diǎn)在UIWindow的位置- (CGPoint)previousLocationInView:(UIView *)view; 該方法記錄了前一個觸摸點(diǎn)的位置北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!UIEvent每產(chǎn)生一個事件,就會產(chǎn)生一個UIEvent對象UIEvent:稱為事件對象,記錄事件產(chǎn)生的時刻和類型常見屬性事件類型property(nonatomic,readonly) UIEventType type;property(nonatomic,readonly) UI
9、EventSubtype subtype;事件產(chǎn)生的時間property(nonatomic,readonly) NSTimeInterval timestamp;UIEvent還提供了相應(yīng)的方法可以獲得在某個view上面的觸摸對象(UITouch)北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!touches和event參數(shù)一次完整的觸摸過程,會經(jīng)歷3個狀態(tài):觸摸開始:- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event觸摸移動:- (void)touchesMoved:(NSSet *)touches withEven
10、t:(UIEvent *)event觸摸結(jié)束:- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event觸摸取消(可能會經(jīng)歷):- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event4個觸摸事件處理方法中,都有NSSet *touches和UIEvent *event兩個參數(shù)一次完整的觸摸過程中,只會產(chǎn)生一個事件對象,4個觸摸方法都是同一個event參數(shù)如果兩根手指同時觸摸一個view,那么view只會調(diào)用一次touchesBegan:with
11、Event:方法,touches參數(shù)中裝著2個UITouch對象如果這兩根手指一前一后分開觸摸同一個view,那么view會分別調(diào)用2次touchesBegan:withEvent:方法,并且每次調(diào)用時的touches參數(shù)中只包含一個UITouch對象根據(jù)touches中UITouch的個數(shù)可以判斷出是單點(diǎn)觸摸還是多點(diǎn)觸摸北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!事件的產(chǎn)生和傳遞發(fā)生觸摸事件后,系統(tǒng)會將該事件加入到一個由UIApplication管理的事件隊(duì)列中UIApplication會從事件隊(duì)列中取出最前面的事件,并將事件分發(fā)下去以便處理,通常,先發(fā)送事件給應(yīng)用程序的主窗口(keyWin
12、dow)主窗口會在視圖層次結(jié)構(gòu)中找到一個最合適的視圖來處理觸摸事件,這也是整個事件處理過程的第一步找到合適的視圖控件后,就會調(diào)用視圖控件的touches方法來作具體的事件處理touchesBegantouchesMovedtouchedEnded北京傳智播客教育 高級軟件人才實(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ù)前面的兩個步驟如果沒有符合條件的子控件,那么就自己最適合處理北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!UIView不接收觸摸事件的三種情況1.不接收用戶交互userInteractionEnabled = NO2.隱藏hidden = YES3.透明alpha = 0.0 0.01提示:UIImageView的userInteractionEnabled默認(rèn)就是NO,因此UI
14、ImageView以及它的子控件默認(rèn)是不能接收觸摸事件的北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!觸摸事件處理的詳細(xì)過程用戶點(diǎn)擊屏幕后產(chǎn)生的一個觸摸事件,經(jīng)過一些列的傳遞過程后,會找到最合適的視圖控件來處理這個事件找到最合適的視圖控件后,就會調(diào)用控件的touches方法來作具體的事件處理touchesBegantouchesMovedtouchedEnded這些touches方法的默認(rèn)做法是將事件順著響應(yīng)者鏈條向上傳遞,將事件交給上一個響應(yīng)者進(jìn)行處理北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!響應(yīng)者鏈條示意圖北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!響應(yīng)者鏈的事件傳遞過程1.如果view的
15、控制器存在,就傳遞給控制器;如果控制器不存在,則將其傳遞給它的父視圖2.在視圖層次結(jié)構(gòu)的最頂級視圖,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對象進(jìn)行處理3.如果window對象也不處理,則其將事件或消息傳遞給UIApplication對象4.如果UIApplication也不能處理該事件或消息,則將其丟棄北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!監(jiān)聽觸摸事件的做法如果想監(jiān)聽一個view上面的觸摸事件,之前的做法是 自定義一個view 實(shí)現(xiàn)view的touches方法,在方法內(nèi)部實(shí)現(xiàn)具體處理代碼通過touches方法監(jiān)聽view觸摸事件,有很明顯的幾個缺點(diǎn) 必須得自定
16、義view 由于是在view內(nèi)部的touches方法中監(jiān)聽觸摸事件,因此默認(rèn)情況下,無法讓其他外界對象監(jiān)聽view的觸摸事件 不容易區(qū)分用戶的具體手勢行為iOS 3.2之后,蘋果推出了手勢識別功能(Gesture Recognizer),在觸摸事件處理方面,大大簡化了開發(fā)者的開發(fā)難度北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!UIGestureRecognizer為了完成手勢識別,必須借助于手勢識別器-UIGestureRecognizer利用UIGestureRecognizer,能輕松識別用戶在某個view上面做的一些常見手勢UIGestureRecognizer是一個抽象類,定義了所有手
17、勢的基本行為,使用它的子類才能處理具體的手勢UITapGestureRecognizer(敲擊)UIPinchGestureRecognizer(捏合,用于縮放)UIPanGestureRecognizer(拖拽)UISwipeGestureRecognizer(輕掃)UIRotationGestureRecognizer(旋轉(zhuǎn))UILongPressGestureRecognizer(長按)北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!UITapGestureRecognizer每一個手勢識別器的用法都差不多,比如UITapGestureRecognizer的使用步驟如下創(chuàng)建手勢識別器對象UI
18、TapGestureRecognizer *tap = UITapGestureRecognizer alloc init;設(shè)置手勢識別器對象的具體屬性/ 連續(xù)敲擊2次tap.numberOfTapsRequired = 2;/ 需要2根手指一起敲擊tap.numberOfTouchesRequired = 2;添加手勢識別器到對應(yīng)的view上self.iconView addGestureRecognizer:tap;監(jiān)聽手勢的觸發(fā)tap addTarget:self action:selector(tapIconView:);北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家!手勢識別的狀態(tài)typedef NS_ENUM(NSInteger, UIGestureRecognizerState) / 沒有觸摸事件發(fā)生,所有手勢識別的默認(rèn)狀態(tài) UIGestureRecognizerStatePossible, / 一個手勢已經(jīng)開始但尚未改變或者完成時 UIGestureRecognizerStateBegan, / 手勢狀態(tài)改
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024美發(fā)店與消防部門安全檢查合同
- 2025年度校園食堂廚師勞務(wù)派遣合同4篇
- 2025年度圖書代售及推廣服務(wù)合同4篇
- 2024碎石原料交易市場建設(shè)合同
- 2024裝修工程額外項(xiàng)目合同書一
- 2025年度智慧城市建設(shè)綜合解決方案承包合作協(xié)議4篇
- 2025年度SEO風(fēng)險管理與合規(guī)性審核合同3篇
- 2025年度山林土地流轉(zhuǎn)與綜合開發(fā)承包合同4篇
- 2024正規(guī)商鋪買賣合同合同標(biāo)的物權(quán)屬核實(shí)協(xié)議3篇
- 2024年教學(xué)專用高清晰度數(shù)碼集成背投行業(yè)發(fā)展趨勢報告
- 《呼吸衰竭的治療》
- 有余數(shù)的除法算式300題
- 2024年度醫(yī)患溝通課件
- 2024年中考政治總復(fù)習(xí)初中道德與法治知識點(diǎn)總結(jié)(重點(diǎn)標(biāo)記版)
- 2024年手術(shù)室的應(yīng)急預(yù)案
- 五年級上冊小數(shù)除法豎式計(jì)算練習(xí)300題及答案
- 【外資便利店在我國的經(jīng)營策略分析案例:以日本羅森便利店為例11000字(論文)】
- 6061鋁合金退火工藝
- 教師職業(yè)素養(yǎng)與職業(yè)發(fā)展規(guī)劃
- 語言規(guī)劃講義
- Talent5五大職業(yè)性格測試技巧138答案
評論
0/150
提交評論