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