在開發 iOS 程式的時候,有很多機會會用到手勢偵測(gesture recognizer),或許有一個場景是這樣的:
- 你有個 superview,裡頭有 subview,裡頭還有 sub-subview,還有 sub-sub-subview
- 每個 view 都放了一或多個手勢偵測
我們會直覺的認為:既然 view 是一層層疊起來,那應該是最上層的手勢偵測失敗,才會傳遞到下一層手勢偵測,若是又失敗就繼續往下傳遞。
這在之前的 iOS 似乎都運作的好好的,但不知道為何,到了 iOS 7 竟然出錯了 - 有時候上層的手勢沒有被辨識到,反而是下層的手勢先被執行了!難道不是最上層的手勢先被執行嗎?我的程式碼哪裡寫錯了嗎?
這一定是 iOS 7 的 bug 啦!
很不幸的,當你認真翻閱蘋果文件時,你會發現它有說:
手勢辨識的順序是不保證的,並非越上層的手勢就會越早被辨識