• iOS 手势大全


    1、Touch事件

    //系统自动调用

    //一个UITouch代表一根手指 按住option变成两根手指

    //虽然是两个手指,但只执行一次触摸事件

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {} 开始触摸事件

    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {} 手指移动事件

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {} 结束触摸时间

    - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {} 取消触摸手势

      //获取任意手指

        UITouch * touch = [touches anyObject];

     //手指触摸的View

        NSLog(@"touch.view:%@",touch.view);

       //点击次数

        NSLog(@"点击次数:%ld",touch.tapCount);

     //当前手指的位置

        CGPoint currentPonit = [touch locationInView:touch.view];

     //上一次手指所处的位置

        CGPoint previousPonit = [touch previousLocationInView:touch.view];

    2、事件分发

     事件产生和传递的过程:

     当发生触摸事件的时候,先传递给UIApplication,以队列结构接收事件。传递给主窗口,主窗口传递给控制器的UIView,遍历UIView的子视图,寻找最合适的UIView来接收。 

     响应者链:

     该类的上一级如果是UIView,子视图处理事件,如果处理不了,找他的父视图。

     该类的上一级如果是UIViewController,则是由所属的控制器来处理。

    //返回最合适的UIView

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {}

    //判断当前的点在不在View上

    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {

        

        return YES;

    }

    3、UIImageView点击事件

        self.imageView.userInteractionEnabled = NO;

        //无法响应事件的3种情况:

        //1、当userInteractionEnabled未开启

        //2、当hidden属性为YES

        //3、当alpha属性为0时

        //将以YellowView为坐标系的点,转化为以button为坐标系的点 self = yellowView

        CGPoint buttonPoint = [self convertPoint:point toView:self.button];

    这个函数的用处是判断当前的点击或者触摸事件的点是否在当前的view中。

       它被hitTest:withEvent:调用

    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;   // default returns YES if point is in bounds

    4、手机摇一摇

    //事件的种类

    - (void)motionBegan:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event {

        if (motion == UIEventSubtypeMotionShake) {

            NSLog(@"摇一摇");

        }    

    }

    5、**Gesture手势

     UIGestureRecognizerState:

     开始: UIGestureRecognizerStateBegan

     改变: UIGestureRecognizerStateChanged

     结束: UIGestureRecognizerStateEnded

     取消: UIGestureRecognizerStateCancelled

      失败: UIGestureRecognizerStateFailed,

    //同时使用两个手势 捏合 旋转

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

        

        return YES;

    }

    (1)点击手势 Tap

        UITapGestureRecognizer * tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction1:)];

        //点击一次便触发

        tap1.numberOfTapsRequired = 1;

        [self.imageView addGestureRecognizer:tap1];    

        UITapGestureRecognizer * tap2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction2:)];

        //双击一次便触发

        tap2.numberOfTapsRequired = 2;

        [self.imageView addGestureRecognizer:tap2];

        //如果tap2成功执行,让tap1失败

        [tap1 requireGestureRecognizerToFail:tap2];

    (2)长按手势 LongPress
        UILongPressGestureRecognizer * longGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longAction:)];

        [self.imageView addGestureRecognizer:longGesture];

    (3)轻扫手势  Swipe

    UISwipeGestureRecognizer * swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];

        //设置轻扫方向

        swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft;

        [self.imageView addGestureRecognizer:swipeGesture];

    (4)捏合事件 Pinch

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

        pinchGesture.delegate = self;

        [self.imageView addGestureRecognizer:pinchGesture];    

        self.pin = pinchGesture;

    //对应事件

    - (void)pinchAction:(UIPinchGestureRecognizer *)pin {

        self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pin.scale, pin.scale);

        //复位

        pin.scale = 1;

        }

    (5)旋转事件 Rotation

        UIRotationGestureRecognizer * rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];

        rotationGesture.delegate = self;

        [self.imageView addGestureRecognizer:rotationGesture];

    //对应事件

    - (void)rotationAction:(UIRotationGestureRecognizer *)rotation {

        self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotation.rotation);    

        //复位

        rotation.rotation = 0;

    }

    (6)拖动手势 Pan

     UIPanGestureRecognizer * panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];

        [self.imageView addGestureRecognizer:panGesture];

    //对应事件

    - (void)panAction:(UIPanGestureRecognizer *)pan {

        //获取拖动的偏移量

        CGPoint ponit = [pan translationInView:self.view];

        self.imageView.center = CGPointMake(self.imageView.center.x + ponit.x, self.imageView.center.y + ponit.y);

        //复位

        [pan setTranslation:CGPointZero inView:self.imageView];

    }

  • 相关阅读:
    记一次 产品提的需求 (声音、振动)
    vue.config.js publicPath "./" npm run build无效的原因
    js 去掉字符串str中,连续重复的地方
    微信小程序map地图画圆圈效果
    2019年计划
    centos 7 nginx 远程无法访问的原因
    Eclipse配置关联Tomcat并运行项目
    .net连接mysql
    python xml.dom模块解析xml
    气象城市ID列表
  • 原文地址:https://www.cnblogs.com/PSSSCode/p/5271999.html
Copyright © 2020-2023  润新知