2012-08-22 36 views
1

我目前正在實現一個益智遊戲,玩家必須將圖像拖放到框架上。我已將UIPanGestureRecognizer附加到拼圖的每個部分,並且效果很好。 但是,我遇到了「L」形件的問題。該作品的空白區域「阻止」手勢識別,並防止底部的作品接收事件。將UIGestureRecognizer傳遞給下面的UIView

例如,用「X」是我的「L」形片,我不能碰「一」:

xxx 
xa 

我已經試過幾件事情,比如定義shouldReceiveTouch代表,所以它當觸摸「L」的空白區域時返回「否」,但它不會將觸摸傳遞到下面的視圖。

我也已經定義了panRecognizer.cancelsTouchesInView = NO;但是這也行不通。

我在考慮使用nextresponder,但它似乎不可能與UIGestures。

如果有人有另一個想法,這將真的有幫助。 謝謝。

回答

3

這似乎是-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event的工作。編寫一個覆蓋此方法的UIViewMyLView)的子類,並在觸摸位於實際「L」內時返回YES

所以,如果你的觀點是90 X 120和「L」是30寬這樣的:

x00 
x00 
x00 
xxx 

你的實現可能看起來像這樣:

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    return point.x < 30. || point.y > 90.; 
} 

從未測試此,但這是從蘋果的文檔中讀取的。

+0

它的工作!非常感謝凱。 –

+0

@Antoine歡迎您 –

+0

是的!我一直在尋找這個,這值得讚賞100。 – possan

0

默認情況下,如果一個子視圖無法響應觸摸,它將通過響應者鏈,在這種情況下,這意味着超級視圖,因此我建議製作超級視圖的小視圖子視圖,以便不存在「阻塞「在你需要的手勢上。

0

不知道這是否會在您的情況有所幫助,但如果你想在上面觀忽略任何用戶輸入(觸摸事件),那麼你可以撥打:

self.pieceX.userInteractionEnabled = NO; 

當然,你也可以切換這個狀態在相應的UIGestureRecognizer委託方法中。