zoukankan      html  css  js  c++  java
  • iOS常用手势识别器

    手势识别状态:

    typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {

        // 没有触摸事件发生,所有手势识别的默认状态

        UIGestureRecognizerStatePossible,

        // 一个手势已经开始但尚未改变或者完成时

        UIGestureRecognizerStateBegan,

        // 手势状态改变

        UIGestureRecognizerStateChanged,

        // 手势完成

        UIGestureRecognizerStateEnded,

        // 手势取消,恢复至Possible状态

        UIGestureRecognizerStateCancelled,

        // 手势失败,恢复至Possible状态

        UIGestureRecognizerStateFailed,

        // 识别到手势识别

        UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded

    };


    需要同时支持多种手势时实现delegate方法,返回YES,可判断几种手势同时进行

    // 该方法返回的BOOL值决定了view是否能够同时响应多个手势

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

    {

        NSLog(@"%@ - %@", gestureRecognizer.class, otherGestureRecognizer.class);

        return YES;

    }



    1.点击识别器


    // 创建点击手势识别器,并监听

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTouch)];

    // 设置手势识别器属性

    // 点击几次响应

    tap.numberOfTapsRequired = 2;

    // 几个手指同时点击

    tap.numberOfTouchesRequired = 2;

    // 添加手势识别器

    [self.uiimageView addGestureRecognizer:tap];


    2.长按识别器

    // 创建长按识别器,并监听

    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(LongPressTouch)];

    // 设置属性

    // 多长时间响应

    longPress.minimumPressDuration = 5;

    // 按下后事件响应之前允许手指移动偏移位

    longPress.allowableMovement = 10;

    // 添加识别器

    [self.view1 addGestureRecognizer:longPress];


    3.轻扫

    // 支持的手势方向枚举类型

    typedef NS_OPTIONS(NSUInteger, UISwipeGestureRecognizerDirection) {

        UISwipeGestureRecognizerDirectionRight = 1 << 0,    // 向右

        UISwipeGestureRecognizerDirectionLeft  = 1 << 1,    // 向左

        UISwipeGestureRecognizerDirectionUp    = 1 << 2,    // 向上

        UISwipeGestureRecognizerDirectionDown  = 1 << 3     // 向下

    };


    // 创建轻扫识别器,并监听如果要同时使用多个方向,分别创建多个轻扫识别器

    // 例:添加向左向右手势

    // 向左

    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipehTouch)];

    swipe.direction = UISwipeGestureRecognizerDirectionLeft;

    [self.view1 addGestureRecognizer:swipe];

    // 向右

    UISwipeGestureRecognizer *swipe2 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipehTouch)];

    swipe2.direction = UISwipeGestureRecognizerDirectionRight;

    [self.view1 addGestureRecognizer:swipe2];


    /**

     * 旋转、捏合和拖拽注意点:当手指松开后会重置值,如果需要进行缩放旋转等操作,需在适当地方给返回的值赋值

     */

    4.旋转

    // 创建旋转识别器,并监听

    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(RotationTouch:)];


    [self.view1 addGestureRecognizer:rotation];


    // 注意点

    - (void)RotationTouch:(UIRotationGestureRecognizer *)routation

    {

        NSLog(@"旋转");

        // 每次加上之前的角度

        self.view1.transform = CGAffineTransformRotate(self.view1.transform, routation.rotation);

        // 将旋转角度清0

        routation.rotation = 0;

    }


    5.捏合

    // 创建捏合手势

    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchTouch:)];


    [self.view1 addGestureRecognizer:pinch];


    // 注意点

    - (void)pinchTouch:(UIPinchGestureRecognizer *)pinch

    {

        NSLog(@"捏合");

        self.view1.transform = CGAffineTransformScale(self.view1.transform, pinch.scale, pinch.scale);

        pinch.scale = 1.0;

    }


    6.拖拽

    // 创建拖拽手势

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(PanTouch)];


    [self.view1 addGestureRecognizer:pan];

    // 注意点

    - (void)PanTouch:(UIPanGestureRecognizer *)pan

    {

        // 获取移动的坐标

        CGPoint point = [pan translationInView:pan.view];

        

        NSLog(@"拖拽");

        CGPoint temp = self.view1.center;

        temp.x += point.x;

        temp.y += point.y;

        self.view1.center = temp;

        

        // 必须加

        [pan setTranslation:CGPointZero inView:pan.view];

    }


    DEMO 链接: http://pan.baidu.com/s/1qW3VmUg 密码: 9pqk

  • 相关阅读:
    负载(Load)分析及问题排查
    MySQL 数据库规范--调优篇(终结篇)
    AbstractQueuedSynchronizer
    为什么String被设计为不可变?是否真的不可变?
    数据库 分库 分表 分区
    Oracle 数据库知识汇总篇
    小知识:如何判断数据文件的高水位线
    RHEL7安装11204 RAC的注意事项
    案例:DG主库未设置force logging导致备库坏块
    Oracle 11g RAC之HAIP相关问题总结
  • 原文地址:https://www.cnblogs.com/miaomiaoshen/p/5188623.html
Copyright © 2011-2022 走看看