Make by:弓_虽_子
通过touches方法监听view触摸事件的缺点?
1.必须得自定义view,在自定义的View当中去实现touches方法.
2.由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件
3.不容易区分用户的具体手势行为(不容易区分是长按手势,还是缩放手势)这些等.
iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer在触摸事件处理方面大大简化了开发者的开发难度
UIGestureRecognizer手势识别器
利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势
UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势
手势使用方法
1.创建手势
2.添加手势
3.实现手势方法
添加点按手势
UITapGestureRecognizer*tap= [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(tap)];
手势也可以设置代理
tap.delegate=self;
添加手势
[self.imageVaddGestureRecognizer:tap];
代理方法:
是否允许接收手指
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizershouldReceiveTouch:(UITouch*)touch{
让图片的左边不可以点击,
获取当前手指所在的点.是在图片的左边还是在图片的右边.
CGPointcurP = [touchlocationInView:self.imageV];
if(curP.x>self.imageV.bounds.size.width*0.5) {
在图片的右侧
returnYES;
}else{
在图片的左侧
returnNO;
}
returnYES;
}
添加长按手势
UILongPressGestureRecognizer*longP = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longP:)];
[self.imageVaddGestureRecognizer:longP];
当长按时调用.
这个方法会调用很多次,当手指长按在上面不松,来回移动时,会持续调用.
所以要判断它的状态.
- (void)longP:(UILongPressGestureRecognizer*)longP{
if(longP.state==UIGestureRecognizerStateBegan){
NSLog(@"开始长按");
}elseif(longP.state==UIGestureRecognizerStateChanged){
NSLog(@"长按时手指移动");
}elseif(longP.state==UIGestureRecognizerStateEnded){
NSLog(@"手指离开屏幕");
}
}
添加轻扫手势
UISwipeGestureRecognizer*swipe = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(swipe:)];
轻扫手势默认是向右边称轻扫
可以设置轻扫的方法.
一个轻扫手势只能设置一个方法的轻扫.想要让它有多个方向的手势,必须得要设置的
swipe.direction=UISwipeGestureRecognizerDirectionLeft;
[self.imageVaddGestureRecognizer:swipe];
添加轻扫手势
UISwipeGestureRecognizer*swipe2 = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(swipe:)];
轻扫手势默认是向右边称轻扫
可以设置轻扫的方法.
一个轻扫手势只能设置一个方法的轻扫.想要让它有多个方向的手势,必须得要设置的
swipe2.direction=UISwipeGestureRecognizerDirectionUp;
[self.imageVaddGestureRecognizer:swipe2];
- (void)swipe:(UISwipeGestureRecognizer*)swipe{
判断的轻扫的方向
if(swipe.direction==UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"向左轻扫");
}elseif(swipe.direction==UISwipeGestureRecognizerDirectionUp){
NSLog(@"向上轻扫");
}
}