• 手势UIGestureRecognizer


    UIGestureRecognizer抽象类,六大手势是其子类;

    • UITapGestureRecognizer        点击
    • UIPinchGestureRecognizer         缩放
    • UIRotationGestureRecognizer     旋转
    • UISwipeGestureRecognizer         轻扫 
    • UIPanGestureRecognizer             拖动
    • UILongPressGestureRecognizer   长按

    typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {//手势当前的状态

        UIGestureRecognizerStatePossible, (默认) 

        UIGestureRecognizerStateBegan,      (开始)

        UIGestureRecognizerStateChanged,(已经改变)  

        UIGestureRecognizerStateEnded,  (结束)   

        UIGestureRecognizerStateCancelled, (取消)

        UIGestureRecognizerStateFailed,  (失败)  

        UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded 

    }

    一、拖动手势  UIPanGestureRecognizer

      UIPanGestureRecognizer *panGesture =[[UIPanGestureRecognize alloc]  initWithTarget:self action:@selection(handlePan:)];

      [view  addGestureRecognizer:panGesture];

    - (void)handlePan:(UIPanGestureRecognizer *)panGesture{
        CGPoint translation = [panGesture translationInView:self.view];
        CGPoint point = CGPointMake(panGesture.view.center.x + translation.x,panGesture.view.center.y + translation.y);
        panGesture.view.center = point;
        [panGesture setTranslation:CGPointZero inView:self.view];
    }
      

    1、确保view是可交互的 view.userInteractionEnabled = yes;

    2、translationInView (相对点击点的偏移量) locationInView(相对屏幕实时坐标)

    3、setTranslation:CGPointZero inView(每次初始化位置) 和translationInView同时使用;

    4、velocityInView (获取速度矢量)  

    二、捏合手势 UIPinchGestureRecognizer

      UIPinchGestureRecognizer  *phinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget: self action:@selector(handlePinch:)];

      [view addGestureRecognizer:pinchGesture];

    - (void)handlePinch:(UIPinchGestureRecognizer *)recognizer{
        CGFloat scale = recognizer.scale;
        recognizer.view.transform = CGAffineTransformMakeScale(scale, scale);// 每次缩放都回复原来基础下变化
    //    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, scale, scale);//在已经缩放大小基础下累加变化
    //    recognizer.scale = 1.0;
    }

      scale 缩放倍数 ,velocity 缩放速率;

     三、旋转手势 UIRotationGestureRecognizer

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

      [view addGestureRecognizer:rotationGesture];

    - (void)handleRotation:(UIRotationGestureRecognizer *)recognizer {
        recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
        recognizer.rotation = 0.0;
    }

    四、点击手势 UITapGestureRecognizer

    @property (nonatomic) NSUInteger  numberOfTapsRequired;       // 点击次数(默认一次)
    @property (nonatomic) NSUInteger  numberOfTouchesRequired __TVOS_PROHIBITED;    // 需要手字数(默认一个点击点)

    五、长按手势 UILongPressGestureRecognizer

    @property (nonatomic) NSUInteger numberOfTapsRequired;      // Default is 0. The number of full taps required before the press for gesture to be recognized
    @property (nonatomic) NSUInteger numberOfTouchesRequired __TVOS_PROHIBITED;   // Default is 1. Number of fingers that must be held down for the gesture to be recognized
    
    @property (nonatomic) CFTimeInterval minimumPressDuration; // Default is 0.5. 最小长按时间
    @property (nonatomic) CGFloat allowableMovement;           // Default is 10. 长按时允许移动的距离

     六、轻扫手势 UISwipeGestureRecognizer

    typedef NS_OPTIONS(NSUInteger, UISwipeGestureRecognizerDirection) {
        UISwipeGestureRecognizerDirectionRight = 1 << 0, 
        UISwipeGestureRecognizerDirectionLeft  = 1 << 1,
        UISwipeGestureRecognizerDirectionUp    = 1 << 2,
        UISwipeGestureRecognizerDirectionDown  = 1 << 3
    };
    @property(nonatomic) UISwipeGestureRecognizerDirection direction; //轻扫方向

    号外:同时响应多种手势

    设置手势delegate实现方法

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
        return YES;
    }
    ForeverGuard博客园
  • 相关阅读:
    JavaScript伪协议
    http-equiv
    js 获取鼠标坐标
    js daily
    Swift中属性Properties
    Swift中类和结构体
    Swift和Java在枚举方面的比较
    Swift特有语法:闭包
    Swift和Java在函数(method/方法)方面的比较
    Swift和Java控制流比较
  • 原文地址:https://www.cnblogs.com/xianfeng-zhang/p/6509688.html
Copyright © 2020-2023  润新知