本來以為是自己程式在touchesMoved事件中沒有寫好的關係,但看了許多其他的文章,覺得自己寫的應該是沒有什麼問題才是。後來加入一些log去看,發現拖拉(Drag)中斷的原因都是因為發生了touchesCancelled事件,而且並沒有接著發生touchesBegan事件,顯然是在拖拉間,我的touchesMoved被其他process給cancelled掉了。
在花了一點時間根據上述的情形做搜尋後,終於讓我找到了答案:
原來當你的UIView上有 UIGestureRecognizers時, UIGestureRecognizers會自動cancel目前正在發生的touch event,如果 UIGestureRecognizers認為現在的touch event是屬於它的gesture時。因此,這個時候,為了避免 UIGestureRecognizers干擾你的touch event, UIGestureRecognizers中的一個property: cancelsTouchesInView就必須設定為NO (預設為YES)。原始出處 http://stackoverflow.com/questions/5818692/how-to-avoid-touches-cancelled-event
另外,UIScrollView也有同樣的問題,如果你在UIScrollView中要執行Drag動作時,UIScrollView也會cancel你的動作如果它認為目前的動作是scroll的話。這時就要將UIScrollView中的一個property: CanCancelContentTouches設定為NO,就可解決這個問題。原始出處 http://www.iphonedevsdk.com/forum/iphone-sdk-development/49840-touchescancelled-called-unexpectedly.html#post286709
沒有留言:
張貼留言