黑馬ios就業(yè)2014年8 12月0901處理源碼_第1頁
黑馬ios就業(yè)2014年8 12月0901處理源碼_第2頁
黑馬ios就業(yè)2014年8 12月0901處理源碼_第3頁
黑馬ios就業(yè)2014年8 12月0901處理源碼_第4頁
黑馬ios就業(yè)2014年8 12月0901處理源碼_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

觸摸事件iOS學(xué)院iOS中的事件在用戶使用app過程中,會產(chǎn)生各種各樣的事件iOS中的事件可以分為3大類型觸摸事件加速計事件遠程控制事件響應(yīng)者對象在iOS中不是任何對象都能處理事件,只有繼承了UIResponder的對象才能接收并處理事件。我們稱之為“響應(yīng)者對象”UIApplication、UIViewController、UIView都繼承自UIResponder,因此它們都是響應(yīng)者對象,都能夠接收并處理事件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

withEvent:(UIEvent

*)event;加速計事件(void)motionBegan:(UIEventSubtype)motion

withEvent:(UIEvent

*)event;(void)motionEnded:(UIEventSubtype)motion

withEvent:(UIEvent

*)event;(void)motionCancelled:(UIEventSubtype)motion

withEvent:(UIEvent

*)event;遠程控制事件-

(void)remoteControlReceivedWithEvent:(UIEvent

*)event;UIView的觸摸事件處理UIView是UIResponder的子類,可以實現(xiàn)下列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一根或者多根手指離開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對象UITouch當用戶用一根手指觸摸屏幕時,會創(chuàng)建一個與手指相關(guān)聯(lián)的UITouch對象一根手指對應(yīng)一個UITouch對象UITouch的作用保存著跟手指相關(guān)的信息,比如觸摸的位置、時間、階段當手指移動時,系統(tǒng)會更新同一個UITouch對象,使之能夠一直保存該手指的觸摸位置。當手指離開屏幕時,系統(tǒng)會銷毀相應(yīng)的UITouch對象提示:iPhone開發(fā)中,要避免使用雙擊事件!UITouch的屬性觸摸產(chǎn)生時所處的窗口@property(nonatomic,readonly,retain)

UIWindow*window;觸摸產(chǎn)生時所處的視圖@property(nonatomic,readonly,retain)

UIView*view;短時間內(nèi)點按屏幕的次數(shù),可以根據(jù)tapCount判斷單擊、雙擊或更多的點擊@property(nonatomic,readonly)

NSUInteger

tapCount;記錄了觸摸事件產(chǎn)生或變化時的時間,單位是秒@property(nonatomic,readonly)

NSTimeInterval

timestamp;當前觸摸事件所處的狀態(tài)@property(nonatomic,readonly)

UITouchPhasephase;UITouch的方法-

(CGPoint)locationInView:(UIView

*)view;返回值表示觸摸在view上的位置這里返回的位置是針對view的坐標系的(以view的左上角為原點(0,

0))調(diào)用時傳入的view參數(shù)為nil的話,返回的是觸摸點在UIWindow的位置-

(CGPoint)previousLocationInView:(UIView

*)view;該方法記錄了前一個觸摸點的位置UIEvent每產(chǎn)生一個事件,就會產(chǎn)生一個UIEvent對象UIEvent:稱為事件對象,記錄事件產(chǎn)生的時刻和類型常見屬性事件類型@property(nonatomic,readonly)

UIEventTypetype;@property(nonatomic,readonly)

UIEventSubtype

subtype;事件產(chǎn)生的時間@property(nonatomic,readonly)

NSTimeInterval

timestamp;UIEvent還提供了相應(yīng)的方法可以獲得在某個view上面的觸摸對象(UITouch)touches和event參數(shù)一次完整的觸摸過程,會經(jīng)歷3個狀態(tài):觸摸開始:-(void)touchesBegan:(NSSet

*)touches

withEvent:(UIEvent

*)event觸摸移動:-(void)touchesMoved:(NSSet

*)touches

withEvent:(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:withEvent:方法,touches參數(shù)中裝著2個UITouch對象如果這兩根手指一前一后分開觸摸同一個view,那么view會分別調(diào)用2次touchesBegan:withEvent:方法,并且每次調(diào)用時的touches參數(shù)中只包含一個UITouch對象根據(jù)touches中UITouch的個數(shù)可以判斷出是單點觸摸還是多點觸摸事件的產(chǎn)生和傳遞發(fā)生觸摸事件后,系統(tǒng)會將該事件加入到一個由UIApplication管理的事件隊列中UIApplication會從事件隊列中取出最前面的事件,并將事件分發(fā)下去以便處理,通常,先發(fā)送事件給應(yīng)用程序的主窗口(keyWindow)主窗口會在視圖層次結(jié)構(gòu)中找到一個最合適的視圖來處理觸摸事件,但是這僅僅是整個事件處理過程的第一步找到合適的視圖控件后,就會調(diào)用視圖控件的touches方法來作具體的事件處理touchesBegan…touchesMoved…touchedEnded…事件傳遞示例122343觸摸事件的傳遞是從父控件傳遞到子控件點擊了綠色的view:UIApplication->UIWindow->白色->綠色點擊了藍色的view:UIApplication->UIWindow->白色->橙色->藍色點擊了黃色的view:UIApplication->UIWindow->白色->橙色->藍色->黃色如果父控件不能接收觸摸事件,那么子控件就不可能接收到觸摸事件(掌握)如何找到最合適的控件來處理事件?1>自己是否能接收觸摸事件?否,事件傳遞到此結(jié)束2>觸摸點是否在自己身上?否,事件傳遞到此結(jié)束3>從后往前遍歷子控件,重復(fù)前面的兩個步驟4>如果沒有符合條件的子控件,那么就自己最適合處理UIView不接收觸摸事件的三種情況1.不接收用戶交互userInteractionEnabled

=

NO隱藏hidden

=

YES透明alpha

=

0.0

~

0.01提示:UIImageView的userInteractionEnabled默認就是NO,因此UIImageView以及它的子控件默認是不能接收觸摸事件的觸摸事件處理的詳細過程用戶點擊屏幕后產(chǎn)生的一個觸摸事件,經(jīng)過一系列的傳遞過程后,會找到最合適的視圖控件來處理這個事件找到最合適的視圖控件后,就會調(diào)用控件的touches方法來作具體的事件處理touchesBegan…touchesMoved…touchedEnded…這些touches方法的默認做法是將事件順著響應(yīng)者鏈條向上傳遞,將事件交給上一個響應(yīng)者進行處理響應(yīng)者鏈條示意圖響應(yīng)者鏈條:是由多個響應(yīng)者對象連接起來的鏈條作用:能很清楚的看見每個響應(yīng)者之間的聯(lián)系,并且可以讓一個事件多個對象處理。響應(yīng)者對象:能處理事件的對象事件傳遞的完整過程1>先將事件對象由上往下傳遞(由父控件傳遞給子控件),找到最合適的控件來處理這個事件。2>調(diào)用最合適控件的touches….方法3>如果調(diào)用了[supertouches….];就會將事件順著響應(yīng)者鏈條往上傳遞,傳遞給上一個響應(yīng)者4>接著就會調(diào)用上一個響應(yīng)者的touches….方法如何判斷上一個響應(yīng)者1>如果當前這個view是控制器的view,那么控制器就是上一個響應(yīng)者2>如果當前這個view不是控制器的view,那么父控件就是上一個響應(yīng)者32060

/

3202

*

60

/

32060/

320creenH–

2

*

offsetYoffsetXt

*

scaleht

*

scale0.560r:250l:-220響應(yīng)者鏈的事件傳遞過程1.2.3.4.如果view的控制器存在,就傳遞給控制器;如果控制器不存在,則將其傳遞給它的父視圖在視圖層次結(jié)構(gòu)的最頂級視圖,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對象進行處理如果window對象也不處理,則其將事件或消息傳遞給UIApplication對象如果UIApplication也不能處理該事件或消息,則將其丟棄監(jiān)聽觸摸事件的做法如果想監(jiān)聽一個view上面的觸摸事件,之前的做法是自定義一個view實現(xiàn)view的touches方法,在方法內(nèi)部實現(xiàn)具體處理代碼通過touches方法監(jiān)聽view觸摸事件,有很明顯的幾個缺點必須得自定義view由于是在view內(nèi)部的touches方法中監(jiān)聽觸摸事件,因此默認情況下,無法讓其他外界對象監(jiān)聽view的觸摸事件不容易區(qū)分用戶的具體手勢行為iOS

3.2之后,蘋果推出了手勢識別功能(Gesture

Recognizer),在觸摸事件處理方面,大大簡化了開發(fā)者的開發(fā)難度UIGestureRecognizer為了完成手勢識別,必須借助于手勢識別器----UIGestureRecognizer利用UIGestureRecognizer,能輕松識別用戶在某個view上面做的一些常見手勢UIGestureRecognizer是一個抽象類,定義了所有手勢的基本行為,使用它的子類才能處理具體的手勢UITapGestureRecognizer(敲擊)UIPinchGestureRecognizer(捏合,用于縮放)UIPanGestureRecognizer(拖拽)UISwipeGestureRecognizer(輕掃)UIRotationGestureRecognizer(旋轉(zhuǎn))UILongPressGestureRecognizer(長按)UITapGestureRecognizer每一個手勢識別器的用法都差不多,比如UITapGestureRecognizer的使用步驟如下創(chuàng)建手勢識別器對象UITapGestureRecognizer

*tap

=

[[UITapGestureRecognizer

alloc]

init];設(shè)置手勢識別器對象的具體屬性//連續(xù)敲擊2次tap.numberOfTapsRequired=

2;//需要2根手指一起敲

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論