ios中的事件可以分為三大型別:
1.觸控事件
觸控事件的傳遞是從父控制項到子控制項,如果父控制項不能接收觸控事件,那麼子控制項就不可能接收到觸控事件
不能接收觸控事件的幾種情況:1.userinteractionenabled = no; 2.hidden = yes; 3.alpha = 0.0--0.01
//touches中存放的是uitouch物件
//觸控事件
- (void)touchbegin:(nsset *)touches withevent:(uievent *)event
- (void)touchmoved:(nsset *)touches withevent:(uievent *)event
- (void)touchended:(nsset *)touches withevent:(uievent *)event
//比如有**呼入,會導致觸控事件停止,這時候會呼叫該方法
- (void)touchcancelled:(nsset *)touched withevent:(uievent *)event
//一次完整的觸控過程,會經歷3個狀態:
//觸控開始:- (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
//4個觸控事件處理方法中,都有nsset *touches和uievent *event兩個引數
//一次完整的觸控過程中,只會產生乙個事件物件,4個觸控方法都是同乙個event引數
//如果兩根手指同時觸控乙個view,那麼view只會呼叫一次touchesbegan:withevent:方法,touches引數中裝著2個uitouch物件
//如果這兩根手指一前一後分開觸控同乙個view,那麼view會分別呼叫2次touchesbegan:withevent:方法,並且每次呼叫時的touches引數中只包含乙個uitouch物件
//根據touches中uitouch的個數可以判斷出是單點觸控還是多點觸控
2.加速計事件
//加速劑事件
- (void)motionbegin:(uieventsubtype)motion withevent:(uievent *)event
- (void)motionended:(uieventsubtype)motion withevent:(uievent *)event;
- (void)motioncancelled:(uieventsubtype)motion withevent:(uievent *)event;
3.遠端控制事件
- (void)remotecontrolreceivedwithevent:(uievent *)event;
只有繼承了uiresponder的物件才可以接受並處理事件,又叫「響應者物件」
uitouch 的一些屬性
widow 觸控產生所在的視窗
view 觸控產生所在的檢視
tapcount 短時間內點按螢幕的次數
timestamp 記錄了觸控產生或者變化的時間
phase 觸控事件所處的狀態
uitouchphase是乙個列舉型別,包含:
uitouchphasebegan(觸控開始)
uitouchphasemoved(接觸點移動)
uitouchphasestationary(接觸點無移動)
uitouchphaseended(觸控結束)
uitouchphasecancelled(觸控取消)
- (cgpoint)locationinview:(uiview *)view;
//返回值表示觸控在view上的位置
//這裡返回的位置是針對view的座標系的(以view的左上角為原點(0, 0))
//呼叫時傳入的view引數為nil的話,返回的是觸控點在uiwindow的位置
- (cgpoint)previouslocationinview:(uiview *)view;
//該方法記錄了前乙個觸控點的位置
uievent
沒產生乙個事件,就是乙個uievent物件,記錄了事件產生的時間和型別
//常見屬性
//事件型別
@property(nonatomic,readonly) uieventtype type;
@property(nonatomic,readonly) uieventsubtype subtype;
/*
typedef ns_enum(nsinteger, uieventtype) ;
typedef ns_enum(nsinteger, uieventsubtype) ;
*///事件產生的時間
@property(nonatomic,readonly) nstimeinterval timestamp;
//手勢識別
利用uigesturerecognizer,能輕鬆識別使用者在某個view上面做的一些常見手勢
uigesturerecognizer是乙個抽象類,定義了所有手勢的基本行為,使用它的子類才能處理具體的手勢
uitapgesturerecognizer(敲擊)
uipinchgesturerecognizer(捏合,用於縮放)
uipangesturerecognizer(拖拽)
uiswipegesturerecognizer(輕掃)
uirotationgesturerecognizer(旋轉)
uilongpressgesturerecognizer(長按)
使用:
//建立手勢識別器物件
uitapgesturerecognizer *tap = [[uitapgesturerecognizer alloc] init];
//設定手勢識別器物件的具體屬性
// 連續敲擊2次
tap.numberoftapsrequired = 2;
// 需要2根手指一起敲擊
tap.numberoftouchesrequired = 2;
//新增手勢識別器到對應的view上
[self.iconview addgesturerecognizer:tap];
//監聽手勢的觸發
[tap addtarget:self action:@selector(tapiconview:)];
typedef ns_enum(nsinteger, uigesturerecognizerstate) ;
iOS 手勢識別
首先給大家解釋一下為什麼要學習手勢識別?如果想監聽乙個uiview上面的觸控事件,之前的做法是 自定義乙個uiview 實現uiview的touches方法,在方法裡面實現具體功能 透過touches監聽uiview的觸控事件,有很明顯的幾個缺點 1.必須要自定義uiview,2.由於是在view內...
IOS開發之 事件處理 手勢識別 71
ios3.2之後,蘋果推出了手勢識別功能 guesture recognizer 在觸控事件處理方面,大大簡化了開發者的開發難度 uigesturerecognizer是乙個抽象類,定義了所有手勢的基本行為,使用它的子類才能處理具體的手勢 手勢uitapgesturerecognizer tap u...
iOS手勢識別初探
uigesturerecognizerstate的定義如下 typedef ns enum nsinteger,uigesturerecognizerstate uigesturerecognizerstatepossible 預設狀態,手勢識別器尚未識別出手勢,但是可能已經在處理觸屏事件了。uig...