读书笔记---UIGestureRecognizer 手势识别器

在iOS设备中常用的手势有:Tap(点击),Long Press(长按),Pan(拖动),Swipe(滑动),Rotation(旋转),Pinch(手指的合拢和张开)

在iOS设备上识别手势的有2种实现方式:手势识别器(UIGestureRecognizer)和触摸事件(UITouch)


手势的识别状态

对于视图对象,主要有2个属性

userInteractionEnabled 开启或关闭用户事件

multipleTouchEnabled  设置是否接受多点触摸事件


UIGestureRecognizerStatePossible 手势尚未识别,默认状态

UIGestureRecognizerStateBegan开始接收连续类型手势

UIGestureRecognizerStateChanged接受连续类型手势状态变化

UIGestureRecognizerStateEnded结束接收连续类型手势

UIGestureRecognizerStateCancelled取消接收连续类型手势

UIGestureRecognizerStateFailed离散类型手势识别失败

UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded离散类型手势识别成功


连续类型的手势是由默认状态到识别状态,再到changed状态,其中changed状态可能会多次变化,最后有结束和取消2中状态.

离散手势只有2中状态,一种是识别,一种是取消.


通过XIB的方式添加手势,之前一直没有注意 其实xcode是可以通过xib或者storyboard添加手势,只需要选择你想要的就可以了

读书笔记---UIGestureRecognizer 手势识别器_第1张图片


注意需要添加到你想要的视图,如果是view里的某个视图,则要添加到那个视图里,添加以后会有一个这样的选项多出来

右键拖到程序里,就可以设置action,然后触发你想要的方法了


还需要注意的是

例如:单击

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">tapRecognizer.numberOfTapsRequired=1;
tapRecognizer.numberOfTouchesRequired=1;</span></span></span>

其中taps是触发点击次数,touches是触发手指个数


长按

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">recognizer.allowableMovement = 100.0f;
recognizer.minimumPressDuration = 0.5;</span></span></span>

allowableMovement为设置手势被识别之前,最小移动的距离,单位是points

minimumPressDuration设置手势识别的最短持续时间,单位是秒(不知道为什么在设置这个属性用代码的时候,超过0.5s就会失效,点进去看注释说默认就是0.5s,但是xib则可以设置成1s,不知道是为什么...)

读书笔记---UIGestureRecognizer 手势识别器_第2张图片


拖动


代表最大和最小的触点个数


滑动

如果想判断四个方向的滑动的话,其实应该添加4个手势,下面写一下需要注意的参数

recognizer.direction设置识别手势的方向,分为上下左右

<span style="font-size:18px;"><span style="font-size:18px;">typedef NS_OPTIONS(NSUInteger, UISwipeGestureRecognizerDirection) {
    UISwipeGestureRecognizerDirectionRight = 1 << 0,
    UISwipeGestureRecognizerDirectionLeft  = 1 << 1,
    UISwipeGestureRecognizerDirectionUp    = 1 << 2,
    UISwipeGestureRecognizerDirectionDown  = 1 << 3
};</span></span>

recognizer.numberOfTouchesRequired =1;

识别手指的个数


<span style="font-size:18px;"><span style="font-size:18px;">- (void) foundTap:(UISwipeGestureRecognizer*)paramSender{
    
    NSLog(@"paramSender.direction = %i",paramSender.direction);
    
    if (paramSender.direction == UISwipeGestureRecognizerDirectionDown){
        NSLog(@"向下滑动");
    }
    if (paramSender.direction == UISwipeGestureRecognizerDirectionLeft){
        NSLog(@"向左滑动");
    }
    if (paramSender.direction == UISwipeGestureRecognizerDirectionRight){
        NSLog(@"向右滑动");
    }
    if (paramSender.direction == UISwipeGestureRecognizerDirectionUp){
        NSLog(@"向上滑动");
    }
}</span></span>

判断方向

读书笔记---UIGestureRecognizer 手势识别器_第3张图片


旋转

<span style="font-size:18px;">/* 上一次角度加上本次旋转的角度 */
    self.imageView.transform =  CGAffineTransformMakeRotation(rotationAngleInRadians + paramSender.rotation);
    
    /* 手势识别完成,保存旋转的角度 */
    if (paramSender.state == UIGestureRecognizerStateEnded){
        rotationAngleInRadians += paramSender.rotation;
    }</span>


缩放

<span style="font-size:18px;">
if (paramSender.state == UIGestureRecognizerStateEnded){
        currentScale = paramSender.scale;
    } else if (paramSender.state == UIGestureRecognizerStateBegan &&
               currentScale != 0.0f){
        paramSender.scale = currentScale;
    }
    
    self.imageView.transform = CGAffineTransformMakeScale(paramSender.scale, paramSender.scale);
</span>

更多干货,请支持原作:http://item.jd.com/11436547.html

你可能感兴趣的:(ios,读书笔记,手势,UITouch)