UIGestureRecognizer手势综合使用

来源:互联网 发布:高仿二代身份证 淘宝 编辑:程序博客网 时间:2024/06/16 03:03

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

准备工作:先创建一个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
原创粉丝点击