UISwipeGestureRecognizerDirectio

作者: Bestmer | 来源:发表于2016-08-17 08:47 被阅读321次

    前言

    在轻扫手势UISwipeGestureRecognizer中,可以通过direction属性设置从左往右,从右往左,从上到下,从下到上的轻扫方向。有的时候需要同时设置从左往右和从右往左,这里就运用到了二进制位运算的知识。


    二进制位运算


    按位枚举

    • 通过查看头文件可以发现UISwipeGestureRecognizer的枚举值和我们平时看到的数字1,2,3,4不一样,而是运用了位运算的知识。
    • 举个例子
      • 1 << 0
        • 1的二进制为0001,像左移0位后还是0001
      • 1 << 1
        • 1的二进制为0001,像左移1位后变成0010
      • 1 << 2
        • 同理可得,左移两位后变成了0100
      • 1 << 3
        • 同理可得,左移三位变成1000

    • 注意在使用direction属性时候,只能同时使用同一水平方向的两个值
    • 比如可以写成这样
    swipe.direction = UISwipGestureRecognizerDirectionLeft | UISwipGestureRecognizerDirectionRight; 
    
    • 而不能这样写
    swipe.direction = UISwipGestureRecognizerDirectionRight | UISwipGestureRecognizerDirectionUp
    
    • 但在实际开发中,不推荐左右同时使用
    • 如果非要使用让左滑和右滑都有事件响应,则推荐写成如下形式

    • 在这行语句中
    swipe.direction = UISwipGestureRecognizerDirectionRight | UISwipGestureRecognizerDirectionLeft
    
    • 先做或运算,得到0011
    • 在监听方法里,让或运算得到的结果做与运算
    • 如果0011和UISwipGestureRecognizerDirectionLeft的值0001做与运算得0001,那就输出left
    • 如果0011和UISwipGestureRecognizerDirectionRight的值0010做与运算得0010,那就输出right
    - (void)swipeAction:(UISwipeGestureRecognizer *)swipe {
        if (UISwipeGestureRecognizerDirectionLeft == (swipe.direction & UISwipeGestureRecognizerDirectionLeft))
        {
            NSLog(@"left");
        }
        else if (UISwipeGestureRecognizerDirectionRight == (swipe.direction & UISwipeGestureRecognizerDirectionRight)) {
            NSLog(@"right");
        }
    }
    

    最后

    以上就是我对于二进制枚举的理解。

    相关文章

      网友评论

        本文标题:UISwipeGestureRecognizerDirectio

        本文链接:https://www.haomeiwen.com/subject/sdlmsttx.html