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

点击打开链接



购物商城项目采用PHP+mysql有以及html+css jq以及layer.js datatables bootstorap等插件等开发,采用了MVC模式,建立一个完善的电商系统,通过不同用户的不同需求,进行相应的调配和处理,提高对购买用户进行配置….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值