⼿手势识别器是iOS中⽐比较抽象的一个类,⽤用于识别一个⼿势。由于有关手势的代码比较长,笔者在此加以归整,以方便日后的使用。
新建一个UIImageView视图,放入一张图片
UIImageView *imageView = [[UIImageViewalloc]initWithFrame:CGRectMake(0,20,self.view.frame.size.width,self.view.frame.size.height)];
图片视图中添加图片,字符串内为图片名称
[imageView setImage:[UIImageimageNamed:@"2.jpg"]];
图片的调整,该属性是枚举类型
image.contentMode =UIViewContentModeScaleAspectFit;
[self.viewaddSubview:image];
[imagerelease];
1.点击手势识别器
初始化点击手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(tapClick:)];
执行方法需要点击的次数
tap.numberOfTapsRequired =2;
需要几个手指点击
tap.numberOfTouchesRequired =1;
由于UIImageView默认没有交互,这里手动打开
imageView.userInteractionEnabled = YES;
将手势添加到视图
[imageView addGestureRecognizer:tap];
内存释放
[taprelease];
下面是点击手势执行的内容,这里为打印一句话
-(void)tapClick:(UIScreenEdgePanGestureRecognizer *)tap5 {
NSLog(@"点击手势");
}
2.长按手势识别器(和点击手势类似,这里不再冗述)
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longTapClick:)];
一次长按需要的时间,默认是0.5S
longPress.minimumPressDuration = 2;
在长按判定中,允许用户手指移动的距离
longPress.allowableMovement = 100;
[imageViewaddGestureRecognizer:longPress];
[longPressrelease];
-(void)longTapClick:(UILongPressGestureRecognizer *)longTap {
NSLog(@"长按手势");
}
3.捏合手势识别器
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizeralloc]initWithTarget:selfaction:@selector(pinchClick:)];
[imageViewaddGestureRecognizer:pinch];
[pinchrelease];
-(void)pinchClick:(UIPinchGestureRecognizer *)pinch {
NSLog(@"捏合手势");
获得手势所在的view
UIView *view = pinch.view;
view.transform =CGAffineTransformScale(view.transform, pinch.scale, pinch.scale);
经本人测试,scale属性的值取0会无限缩小,而大于1则会无限放大
pinch.scale =1;
}
PS:在模拟器上实现捏合,按住Alt + 鼠标左键
4.旋转手势识别器(和捏合类似,二者可能会冲突)
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizeralloc]initWithTarget:selfaction:@selector(rotationClick:)];
[imageViewaddGestureRecognizer:rotation];
[rotationrelease];
-(void)rotationClick:(UIRotationGestureRecognizer *)rotation {
NSLog(@"旋转手势");
UIView *view = rotation.view;
view.transform =CGAffineTransformRotate(view.transform, rotation.rotation);
rotation属性取0正好,取别的值速度会变快
rotation.rotation =0;
}
5.平移手势识别器
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizeralloc]initWithTarget:selfaction:@selector(panClick:)];
最大手指数量(默认为1)
pan.maximumNumberOfTouches = 1;
最小手指数量(默认为1)
pan.minimumNumberOfTouches = 1;
[imageViewaddGestureRecognizer:pan];
[panrelease];
-(void)panClick:(UIPanGestureRecognizer *)pan {
NSLog(@"平移手势");
UIView *view = pan.view;
获取鼠标所在位置的坐标
CGPoint point = [pantranslationInView:view];
view.transform =CGAffineTransformTranslate(view.transform, point.x, point.y);
[pansetTranslation:CGPointZeroinView:view];
}
还有轻扫手势识别器UISwipeGestureRecognizer 和 屏幕边缘轻扫手势识别器UIScreenEdgePanGestureRecognizer,都是大同小异