Make by:弓_雖_子
通過touches方法監(jiān)聽view觸摸事件的缺點(diǎn)?
1.必須得自定義view,在自定義的View當(dāng)中去實(shí)現(xiàn)touches方法.
2.由于是在view內(nèi)部的touches方法中監(jiān)聽觸摸事件饿肺,因此默認(rèn)情況下蒋困,無法讓其他外界對(duì)象監(jiān)聽view的觸摸事件
3.不容易區(qū)分用戶的具體手勢行為(不容易區(qū)分是長按手勢,還是縮放手勢)這些等.
iOS 3.2之后,蘋果推出了手勢識(shí)別功能(Gesture Recognizer在觸摸事件處理方面大大簡化了開發(fā)者的開發(fā)難度
UIGestureRecognizer手勢識(shí)別器
利用UIGestureRecognizer敬辣,能輕松識(shí)別用戶在某個(gè)view上面做的一些常見手勢
UIGestureRecognizer是一個(gè)抽象類雪标,定義了所有手勢的基本行為,使用它的子類才能處理具體的手勢
手勢使用方法
1.創(chuàng)建手勢
2.添加手勢
3.實(shí)現(xiàn)手勢方法
添加點(diǎn)按手勢
UITapGestureRecognizer*tap= [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(tap)];
手勢也可以設(shè)置代理
tap.delegate=self;
添加手勢
[self.imageVaddGestureRecognizer:tap];
代理方法:
是否允許接收手指
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizershouldReceiveTouch:(UITouch*)touch{
讓圖片的左邊不可以點(diǎn)擊,
獲取當(dāng)前手指所在的點(diǎn).是在圖片的左邊還是在圖片的右邊.
CGPointcurP = [touchlocationInView:self.imageV];
if(curP.x>self.imageV.bounds.size.width*0.5) {
在圖片的右側(cè)
returnYES;
}else{
在圖片的左側(cè)
returnNO;
}
returnYES;
}
添加長按手勢
UILongPressGestureRecognizer*longP = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longP:)];
[self.imageVaddGestureRecognizer:longP];
當(dāng)長按時(shí)調(diào)用.
這個(gè)方法會(huì)調(diào)用很多次,當(dāng)手指長按在上面不松,來回移動(dòng)時(shí),會(huì)持續(xù)調(diào)用.
所以要判斷它的狀態(tài).
- (void)longP:(UILongPressGestureRecognizer*)longP{
if(longP.state==UIGestureRecognizerStateBegan){
NSLog(@"開始長按");
}elseif(longP.state==UIGestureRecognizerStateChanged){
NSLog(@"長按時(shí)手指移動(dòng)");
}elseif(longP.state==UIGestureRecognizerStateEnded){
NSLog(@"手指離開屏幕");
}
}
添加輕掃手勢
UISwipeGestureRecognizer*swipe = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(swipe:)];
輕掃手勢默認(rèn)是向右邊稱輕掃
可以設(shè)置輕掃的方法.
一個(gè)輕掃手勢只能設(shè)置一個(gè)方法的輕掃.想要讓它有多個(gè)方向的手勢,必須得要設(shè)置的
swipe.direction=UISwipeGestureRecognizerDirectionLeft;
[self.imageVaddGestureRecognizer:swipe];
添加輕掃手勢
UISwipeGestureRecognizer*swipe2 = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(swipe:)];
輕掃手勢默認(rèn)是向右邊稱輕掃
可以設(shè)置輕掃的方法.
一個(gè)輕掃手勢只能設(shè)置一個(gè)方法的輕掃.想要讓它有多個(gè)方向的手勢,必須得要設(shè)置的
swipe2.direction=UISwipeGestureRecognizerDirectionUp;
[self.imageVaddGestureRecognizer:swipe2];
- (void)swipe:(UISwipeGestureRecognizer*)swipe{
判斷的輕掃的方向
if(swipe.direction==UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"向左輕掃");
}elseif(swipe.direction==UISwipeGestureRecognizerDirectionUp){
NSLog(@"向上輕掃");
}
}