[英]How to cancel touchesMoved:withEvent:
我有一個關於觸摸視圖的查詢:
我有一個父視圖(框架是(0,0,768,1024)),它包含兩個子視圖(A和B),一個框架(0,0,512,768)帶有標簽100和B框架(512,0,512,768)帶有標簽200。
我實現了觸摸方法touchesBegan:withEvent:
touchesMoved:withEvent:
touchesEnded:withEvent:
。
當我開始從 A 觸摸到 B 時touchesBegan
和touchesMoved
方法按預期被觸發
我需要實現:當觸摸從 A 到達 B 時,A 的 touchesEnded 應該被觸發,B 的觸摸開始被觸發,反之亦然。我在各自的方法中有自己的邏輯。有人可以建議如何實現相同的目標。
這是故意的行為。 通常,如果您觸摸“取消”按鈕,並且您的手指在抬起時滑到“刪除”按鈕上,您不想意外刪除某些內容。
但是,我遇到過這樣的情況,我確實希望觸摸像這樣傳遞。 與@ejazz 非常相似,我將工作移至包含 A 和 B 的視圖。這啟用了用戶交互,並實現了touchesBegan
、 touchesMoved
和touchesEnded
。
當觸摸在子視圖上移動時,它會發送適當的消息。 我只是打開和關閉子視圖,但如果需要,您應該可以在適當的子視圖上調用touchesBegan
、 touchesMoved
和touchesEnded
。 如果您需要知道觸摸何時開始和結束,您將需要跟蹤與每個觸摸關聯的先前視圖 - 或者只調用其previousLocationInView:
方法。
我建議使用UIPanGestureRecognizer
class。將其附加到父視圖,設置委托。
您現在可以關注狀態和位置。 因此,當 state 是UIGestureRecognizerStateBegan
時,檢查位置是在 A 還是 B,當 state 是UIGestureRecognizerStateEnded
時,檢查位置是在 B 還是 A。
您可以檢查點擊視圖是否包含 A 或 B 視圖
CGRectContainsRect(<#CGRect rect1#>, <#CGRect rect2#>)
然后使用 view.frame
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.