UIGestureRecognizer手势综合使用

手势分为:单击、轻扫、长按、旋转、拖拽、捏合六种,下面就一一给大家说说这六种手势的一些使用方法。

准备工作:先创建一个UIImageView(创建的对象叫做:imageView),方便下面手势的操作。
一、单击手势:UITapGestureRecognizer 
    • numberOfTapsRequired //点击多少次调用单击的方法

    • numberOfTouchesRequired     //多少个手指单击才会调用单击的方法

       以单击手势为例子,以下手势都按这个套路出牌。
步骤一:创建对应的手势
步骤二:设置手势的属性
步骤三:把手势加入到对应的UIImageView里面去
    //单击手势,@selector()是单击后会调用的方法
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onClickControlWithTap:)];
    tap.numberOfTapsRequired = 1;
    tap.numberOfTouchesRequired = 1;
    [imageView addGestureRecognizer:tap]	


二、轻扫手势:UISwipeRecognizer
  • direction//设置轻扫的方向,默认是向右
PS:这里有个坑,如果需要设置多个轻扫方向的话,会用位运算来设置多个方向,这样是不行的。
解决办法:创建多个轻扫手势对象,然后每个轻扫对象设置不同的轻扫方向,然后都加入UIImageView中。

//轻扫手势
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onClickControlWithSwipe:)];
    //允许轻扫的方法(PS:如果这里用分隔符来存放多个方向手势,会出现错误的效果,可以创建多个轻扫手势,然后这些轻扫手势设置不同的轻扫方向,然后全部加入imageView中)
    swipe.direction = UISwipeGestureRecognizerDirectionRight;
    swipe.delegate = self;
    [imageView addGestureRecognizer:swipe];
    
    UISwipeGestureRecognizer *swipe1 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onClickControlWithSwipe:)];
    swipe.direction = UISwipeGestureRecognizerDirectionLeft;
    [imageView addGestureRecognizer:swipe1];


三、长按手势:UILongPressRecognizer
  • numberOfTouchesRequired//多少个手指按下触发事件
  • minimumPressDuration//按下多少秒后触发事件
allowableMovement//手指按下后事件响应之前允许手指移动的偏移量



四、旋转手势:UIRotationRecognizer

/**旋转事件*/
-(void)onClickControlWithRotation:(UIRotationGestureRecognizer *)rotation
{
    if (self.btn_pat.alpha == 1) {
        rotation.view.transform = CGAffineTransformRotate(rotation.view.transform, rotation.rotation);
        //注意,这里每次旋转后都让旋转弧度归零
        /*
          因为每次旋转,rotation.rotatin都是累加的
          比如说:从0开始旋转,第一次旋转了1,那么结果应该是0+1=1  此时rotation.rotatin = 1
                然后再旋转1,那么就是0+1+1,结果应该是2         但是!此时rotation.rotatin = 2(因为是累加的,他是相对于原点移动了2)
                这个时候就会产生错误的结果     产生错误结果原因:0+1+2=3    所以就会越转越快了,因为结果错误
          解决办法:每次旋转后,让rotation.rotatin归零,不需要他给我累加,移动1就变1
         */
        rotation.rotation = 0;
    }
}


五、拖拽手势:UIPanGestureRecognizer

/**拖拽事件*/
-(void)onClickControlWithPan:(UIPanGestureRecognizer *)pan
{
    if (self.btn_pat.alpha == 0) {
        CGPoint point = [pan translationInView:pan.view];
        CGPoint temp = pan.view.center;
        temp.x += point.x;
        temp.y += point.y;
        pan.view.center = temp;
        //和旋转、捏合一样的原理
        [pan setTranslation:CGPointZero inView:pan.view];
    }
}


六、捏合手势:UIPinchGestureRecognizer

/**捏合事件*/
-(void)onClickControlWithPinch:(UIPinchGestureRecognizer *)pinch
{
    pinch.view.transform = CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);
    /*
     和旋转一样的原理,如果不把捏合程度每次都变为1,也会累乘
     */
    pinch.scale = 1.0;
}



综合了6种手势,我做了一个简单的手势例子。

只是我一个脑洞打开的作品而已,小白资历尚浅,还没入门,忘大家轻点喷哦~~~

里面有两个UIImageView:

  • 长按的时候可以让图片360度旋转,再次长按使图片停止旋转
  • 单击的时候可以让图片放大
  • 图片放大后,再次点击能让图片回到原来位置(程序有bug,小白资历浅,改不动了,但是变形的图片也能恢复到原状)
  • 图片在原来形状时候,不能捏合图片,只能拖拽、放大、旋转图片
  • 在图片原来形状的时候,旋转图片后最好不要拖拽图片,因为此时拖拽效果有问题(又是一个bug,又改不动...)  











参考代码:https://github.com/HZhenF/GestureRecognizer.git

点击打开链接



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值