iOS事件###
1.觸摸事件:通過手勢觸發(fā)
2.運動事件:通過手機(jī)搖晃,加速器進(jìn)行觸發(fā)
3.遠(yuǎn)程控制事件:通過其他遠(yuǎn)程設(shè)備觸發(fā)
處理觸發(fā)事件需要繼承UIResponder類的對象才能使用,UIResponder類定義了三類事件相關(guān)的處理方法:
觸發(fā)事件
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
...
運動事件
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;
...
遠(yuǎn)程處理事件
- (void)remoteControlReceivedWithEvent:(UIEvent *)event;
...
手勢使用方法###
創(chuàng)建手勢對象
UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
設(shè)置手勢屬性
tapGesture.numberOfTapsRequired=1;
添加手勢所在的對象
[self.view addGestureRecognizer:tapGesture];
編寫手勢觸發(fā)方法
-(void) tapGesture:(UITapGestureRecognizer *)gesture{}
默認(rèn)是不支持交互的,也就是userInteractionEnabled=NO可霎,因此要接受手勢必須設(shè)置userInteractionEnabled=YES(在iOS中UILabel、UIImageView的userInteractionEnabled默認(rèn)都是NO宴杀,UIButton啥纸、UITextField、UIScrollView婴氮、UITableView等默認(rèn)都是YES)斯棒。
輕掃手勢雖然是連續(xù)手勢但是它的操作事件只會在識別結(jié)束時調(diào)用一次盾致,其他連續(xù)手勢都會調(diào)用多次,一般需要進(jìn)行狀態(tài)判斷荣暮;此外輕掃手勢支持四個方向庭惜,但是如果要支持多個方向需要添加多個輕掃手勢。
手勢沖突###
手勢和手勢觸發(fā)區(qū)域有交集時穗酥,會導(dǎo)致其中一個手勢執(zhí)行失敗护赊。
解決沖突方法
- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;
一個手勢完成的前提,為另外一種手勢執(zhí)行失敗砾跃。
– (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIButton class]]){
return NO;
}
return YES;
}
設(shè)置手勢在固定控件或區(qū)域不響應(yīng)
iOS的觸摸事件中骏啰,事件觸發(fā)是根據(jù)響應(yīng)者鏈進(jìn)行的,上層觸摸事件執(zhí)行后就不再向下傳播抽高。默認(rèn)情況下手勢也是類似的判耕,先識別的手勢會阻斷手勢識別操作繼續(xù)傳播。如果想讓兩層控件都添加了手勢的控件都能正確識別手勢翘骂,可以用代理傳遞下去壁熄。
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
默認(rèn)返回NO,如果返回YES則手勢向下傳遞碳竟。
運動事件###
和運動相關(guān)包括三個事件:運動開始喂柒、運動結(jié)束腋么、取消運動
監(jiān)聽運動事件對UI控件有個前提聪铺,必須讓監(jiān)聽的控件成為第一響應(yīng)者(對于UIViewController視圖控制器和UIAPPlication沒有此要求)尼荆。也就是說(BOOL)canBecomeFirstResponder;方法必須返回YES。同時控件顯示時(在-(void)viewWillAppear:(BOOL)animated;事件中)調(diào)用視圖控制器的becomeFirstResponder方法诈泼。當(dāng)視圖不再顯示時(在-(void)viewDidDisappear:(BOOL)animated;事件中)注銷第一響應(yīng)者身份仙蚜。
pragma mark 設(shè)置控件可以成為第一響應(yīng)者
-(BOOL)canBecomeFirstResponder{
return YES;
}
#pragma mark 運動開始
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{
//這里只處理搖晃事件
if (motion==UIEventSubtypeMotionShake) {
}
}
#pragma mark 運動結(jié)束
-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
}
遠(yuǎn)程控制事件###
有一個和遠(yuǎn)程控制相關(guān)的方法:
-(void)remoteControlReceivedWithEvent:(UIEvent *)event;
要監(jiān)聽到這個事件有三個前提(視圖控制器UIViewController或應(yīng)用程序UIApplication只有兩個)
1.啟用遠(yuǎn)程事件接收使用[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];方法厂汗。
2.對于UI控件同樣要求必須是第一響應(yīng)者(對于視圖控制器UIViewController或者應(yīng)用程序UIApplication對象監(jiān)聽無此要求)。
3.應(yīng)用程序必須是當(dāng)前音頻的控制者呜师,也就是在iOS 7中通知欄中當(dāng)前音頻播放程序必須是我們自己開發(fā)程序娶桦。
感謝筆記出處http://www.cnblogs.com/kenshincui/p/3950646.html#autoid-4-0-0