前言
在輕掃手勢UISwipeGestureRecognizer中,可以通過direction屬性設(shè)置從左往右,從右往左,從上到下,從下到上的輕掃方向。有的時候需要同時設(shè)置從左往右和從右往左,這里就運用到了二進制位運算的知識。
二進制位運算
按位枚舉
- 通過查看頭文件可以發(fā)現(xiàn)UISwipeGestureRecognizer的枚舉值和我們平時看到的數(shù)字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
- 但在實際開發(fā)中,不推薦左右同時使用
- 如果非要使用讓左滑和右滑都有事件響應(yīng),則推薦寫成如下形式
- 在這行語句中
swipe.direction = UISwipGestureRecognizerDirectionRight | UISwipGestureRecognizerDirectionLeft
- 先做或運算,得到0011
- 在監(jiān)聽方法里,讓或運算得到的結(jié)果做與運算
- 如果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");
}
}
最后
以上就是我對于二進制枚舉的理解。