2012-04-10 61 views
0

我有關於在視圖上的觸摸的查詢:如何取消touchesMoved:withEvent:方法

我有一個parentView(幀是(0,0,768,1024)),其包含兩個子視圖(A和B)中,A (0,0,512,768)與標籤100和B框架(512,0,512,768)與標籤200.

我實施觸摸方法touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent:

當我開始從一個觸摸到B touchesBegantouchesMoved方法得到預期

解僱我需要實現:隨着觸摸到達從A B,A的touchesEnded應該被解僱,並觸摸開始B的被解僱,反之亦然。我在他們各自的方法中有我自己的邏輯。可以有人建議如何實現這一點。

+0

您是否在A和B視圖中實現了touchesBegan:withEvent:touchesMoved:withEvent:'touchesEnded:withEvent:'觸摸方法? – gergonzalez 2012-04-10 07:48:01

+0

視圖和B視圖是UIView子類的兩個實例,我實現了這些方法。 – ajay 2012-04-10 08:05:53

回答

0

我建議使用UIPanGestureRecognizer類。將它附加到父視圖,設置委託。

您現在可以按照州和地點。因此,當狀態爲UIGestureRecognizerStateBegan時,請檢查位置是在A還是B,以及狀態是UIGestureRecognizerStateEnded時,檢查位置是在B還是在A.

您可以檢查點擊視圖是否包含A或B視圖

CGRectContainsRect(<#CGRect rect1#>, <#CGRect rect2#>) 

,然後使用view.frame

+0

即使我使用UIPanGestureRecognizer,仍然無法取消手勢改變中的手勢。如果A的UIGestureRecognizerStateChanged和pan點不在同一視圖中,那麼我需要啓動B的UIGestureRecognizerStateBegan,反之亦然。 – ajay 2012-04-10 08:14:23

+0

如果將UIPanGestureRecognizer移動到父視圖並添加一些BOOL狀態(即isInB,isInA),則可以按照更改並自行切換。 – ejazz 2012-04-10 08:20:02

1

這是故意行爲。通常情況下,如果您觸摸取消按鈕,並且您的手指滑入刪除按鈕當您擡起它時,您不希望意外刪除某些東西。

但是,我曾經遇到過這樣的情況,我希望觸及這種情況。就像@ejazz一樣,我將工作轉移到包含A和B的視圖。這啓用了用戶交互,並實施了touchesBegan,touchesMovedtouchesEnded

當觸摸移動到子視圖上時,它會發送適當的消息。我只是打開和關閉子視圖,但如果需要,您應該可以在相應的子視圖上調用touchesBegantouchesMovedtouchesEnded。如果您需要知道觸摸開始和結束的時間,您需要跟蹤與每次觸摸相關聯的前一個視圖 - 或者只需調用其方法即previousLocationInView:

相關問題