前言
在轻扫手势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
- 1 << 0
- 注意在使用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");
}
}
最后
以上就是我对于二进制枚举的理解。