手势的简单使用(6种)以及代理方法

注意:全部都是在UIView上操作手势

代码:

  1 #import "ViewController.h"
  2 @interface ViewController () <UIGestureRecognizerDelegate>
  4 @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  5 @end
  7 @implementation ViewController
  8 - (void)viewDidLoad {
  9     [super viewDidLoad];
 10     //只要是手势,默认都是相对于原来位置,且默认控制只支持一个手势!!若想支持多个手势,详见下面的代理方法
 11 //    [self setUpRotation];
 12 //    [self setUpPinch];
 13     [self setUpPan];
 14 }
 15 
 16 #pragma mark - 点按手势
 17 - (void)setUpTap
 18 {
 19     //创建点按手势
 20     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
 21     //需要连续点3次才能触发
 22     //    tap.numberOfTapsRequired = 3;
 23     //往imageView上添加点按手势
 24     [self.imageView addGestureRecognizer:tap];
 25     //设置点按手势代理
 26     tap.delegate = self;
 27 }
 28 
 29 - (void)tap:(UITapGestureRecognizer *)tap
 30 {
 31     NSLog(@"%s",__func__);
 32 }
 33 
 34 #pragma mark - 长按手势
 35 //默认触发两次(开始触摸半秒后一次,结束触摸一次)
 36 - (void)setUpLongPress
 37 {
 38     UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
 39     [self.imageView addGestureRecognizer:longPress];
 40     longPress.delegate = self;
 41 }
 42 
 43 - (void)longPress:(UILongPressGestureRecognizer *)longPress
 44 {
 45     开始的时候触摸
 46     if (longPress.state == UIGestureRecognizerStateBegan) {
 47        NSLog(@"%s",__func__);
 48     }
 49     结束的时候触摸
 50     if (longPress.state == UIGestureRecognizerStateEnded) {
 51         NSLog(@"%s",__func__);
 52     }
 53 }
 54 
 55 #pragma mark - 轻扫手势
 56 - (void)setUpSwipe
 57 {
 58     //默认轻扫手势往右划屏幕
 59     UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
 60     //向上划
 61     swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
 62     [_imageView addGestureRecognizer:swipeUp];
 63     //一个清扫手势只支持一个方向,如果想支持多个方向,必须创建多个
 64     UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
 65     //向下划
 66     swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
 67     [_imageView addGestureRecognizer:swipeDown];
 68 }
 69 - (void)swipe:(UISwipeGestureRecognizer *)swipe
 70 {
 71     NSLog(@"%s",__func__);
 72 }
 73 
 74 #pragma mark - 旋转手势
 75 //默认传递的角度都相对于最开始的位置
 76 - (void)setUpRotation
 77 {
 78     UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
 79     rotation.delegate = self;
 80     [self.imageView addGestureRecognizer:rotation];
 81 }
 82 - (void)rotation:(UIRotationGestureRecognizer *)rotation
 83 {
 84     //让图片随着手势旋转而旋转,旋转的角度相当于初始位置的值,配合rotation.rotation = 0;无法转动
 85 //    self.imageView.transform = CGAffineTransformMakeRotation(rotation.rotation);
 86     //手势旋转一下能让图片高速旋转N圈,并且不受控制,方向不容易确定。配合rotation.rotation = 0;后角度一直为0
 87     self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotation.rotation);   
 88     //复位
 89     rotation.rotation = 0;
 90     //获取手势旋转的角度
 91     NSLog(@"%f",rotation.rotation);
 92 }
 93 
 94 #pragma mark - 捏合手势
 95 //两根手指放大缩小图片
 96 - (void)setUpPinch
 97 {
 98     UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
 99     pinch.delegate = self;
100     [self.imageView addGestureRecognizer:pinch];
101 }
102 - (void)pinch:(UIPinchGestureRecognizer *)pinch
103 {
104     //放大的比例相对于原始点,注意:这个不能配合pinch.scale = 1使用,否则不能放大
105 //    self.imageView.transform = CGAffineTransformMakeScale(pinch.scale, pinch.scale);
106     //随着两手指的距离增大,图片会无规则的迅速的放大或者缩小(此处无法控制放大还是缩小),注意:配合pinch.scale = 1使用会正常的放大和缩小
107     self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinch.scale, pinch.scale);
108     //复位
109     pinch.scale = 1;
110     NSLog(@"%f",pinch.scale);
111 }
112 
113 #pragma mark - 拖拽
114 //移动视图
115 - (void)setUpPan
116 {
117     UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
118     [self.imageView addGestureRecognizer:pan];
119 }
120 - (void)pan:(UIPanGestureRecognizer *)pan
121 {
122     //获取手势的移动,相对于原始点
123     CGPoint transP = [pan translationInView:self.imageView];
124     self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, transP.x, transP.y);
125     //复位
126     [pan setTranslation:CGPointZero inView:self.imageView];
127     NSLog(@"%@",NSStringFromCGPoint(transP));
128 }
129 @end

代理方法:

 1 是否允许同时支持多个手势,默认只支持一个手势,要调用此方法注意设置代理
 2 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
 3 {
 4     return YES;
 5 }
 6 
 7 是否允许开始触发手势
 8 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
 9 {
10     return NO;
11 }
12 
13 是否允许接收手机的触摸(可以控制触摸的范围)
14 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
15 {
16     //获取当前的触摸点
17     CGPoint currentP = [touch locationInView:self.imageView];
18       在图片的左半区域可以接受触摸
19     if (currentP.x < self.imageView.bounds.size.width * 0.5) {
20         return YES;
21     }else {
22         return NO;
23     }
24 }

 

posted @ 2016-05-01 21:26  hissia  阅读(3037)  评论(0编辑  收藏  举报