UISwipeGestureRecognizerDirection中的枚舉值詳解

前言

在輕掃手勢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

  • 注意在使用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");
    }
}

最后

以上就是我對于二進制枚舉的理解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容