zoukankan      html  css  js  c++  java
  • UIGestureRecognizer手势。

    常用手势处理联合使用时候注意两个点,是否共存 和 正确识别哪一个。 代码参考,添加有要点注释,系统提供手势有6种:

    tap 点击(可以设置单击双击等),longPress长按,Rotation 旋转,pan慢速拖动,swipe快速拖动,pinch缩放 

    {

         UIView *View

                UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureRecognizer:)];

                [pinchGesture setDelegate:self];

                UIRotationGestureRecognizer *rotateGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGestureRecognizer:)];

                [rotateGesture setDelegate:self]; 

                [view addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognizer:)]];

                [view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognizer:)]];

                [view addGestureRecognizer:[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognizer:)]];

                [view addGestureRecognizer:pinchGesture];

                [view addGestureRecognizer:rotateGesture];

                [view setBackgroundColor:[UIColor randomColor]];

    }

    -(void)pinchGestureRecognizer:(UIPinchGestureRecognizer*)gesture{

        [gesture.view setTransform:CGAffineTransformScale(gesture.view.transform, gesture.scale, gesture.scale)];

        gesture.scale = 1;

        [gesture.view.superview bringSubviewToFront:gesture.view];

    }

    -(void)rotationGestureRecognizer:(UIRotationGestureRecognizer*)gesture{

        [gesture.view setTransform:CGAffineTransformRotate(gesture.view.transform, gesture.rotation)];

        gesture.rotation = 0;

        [gesture.view.superview bringSubviewToFront:gesture.view];

    }

    -(void)panGestureRecognizer:(UIPanGestureRecognizer*)gesture{

        CGPoint touchPoint = [gesture locationInView:gesture.view.superview];  

        if (gesture.state == UIGestureRecognizerStateBegan){

            centerPoint = gesture.view.center;

            beginTouchPoint = touchPoint;

        }

        [gesture.view setCenter: CGPointMake(centerPoint.x+(touchPoint.x-beginTouchPoint.x), centerPoint.y+(touchPoint.y-beginTouchPoint.y))];

        [gesture.view.superview bringSubviewToFront:gesture.view];

    }

    -(void)tapGestureRecognizer:(UITapGestureRecognizer *)gesture{

        static int i;

        NSLog(@"tap gesture %d",i++);

    /* 注意,如果使用了单击和双击手势,为了手势识别精确,需要使用到UIGestureRecognizer的实例方法:requireGestureRecognizerToFail:他可以指定某一个 recognizer,即便自己已经滿足條件了,也不會立刻触发,会等到该指定的 recognizer 确定失败之后才触发。代码参考如下:

        [onceTapGR requireGestureRecognizerToFail:doubleTapGR];

     另外Swipe(滑动,快速移动)、Pan (拖移,慢速移动)这两个手势也会存在共存干扰问题,同样可以使用这个方法来解决识别正确的哪一个手势。

     */

     }

    -(void)longPressGestureRecognizer:(UILongPressGestureRecognizer *)gesture{

        static int j;

    //    由于长按手势会在识别和抬起的时候都进入这个方法,所以这里最好判断,将犯法实现放在开始识别进来的时候进行调用就行,避免了一次长按调用两次方法内容。

        if (gesture.state == UIGestureRecognizerStateBegan) {

            NSLog(@"longPress gesture %d",j++);

        }

    }

    //下面这个方法可以实现相似的手势共存(return,YES),手势pan和rotation的共存,(既同时可用)如果要只识别一个手势return NO即可。进入UIGestureRecognizer.h文件中可以看到官方的详细说明。2014-07-11

    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

        if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] || [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {

            return NO;

        }else { 

         return YES;

        }

    }

  • 相关阅读:
    Android开发:android.support.v7.widget.AppCompatButton cannot be cast to android.widget.EditText;使用Fragment时不同引入包的问题解决
    Android开发:java.net.SocketException: Permission denied问题解决
    毕业设计进度:3月26日
    Android开发:在非Activity类中,如何实现跳转到另一个Activity
    Android开发:Textview控件显示的字符串中部分文字格式修改
    Android开发:URLDecoder: Illegal hex characters in escape (%) pattern : %编码问题
    Android开发:输入框点击后弹出的小键盘把页面向上挤压问题解决
    Android开发:Can't create handler inside thread that has not线程问题解决
    CCF认证历年试题
    北大ACM
  • 原文地址:https://www.cnblogs.com/longtaozi/p/3838624.html
Copyright © 2011-2022 走看看