UISwipeGestureRecognizerDirection中的枚举值详解

来源:互联网 时间:2017-01-22


前言

在轻扫手势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");
}
}



最后

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




相关阅读:
Top