2013-10-04 22 views
1

我有2個視圖作爲主視圖的子視圖。iOS 7 - 透明UIView屏蔽手勢識別器

主視圖 | | ---查看A | | ---查看B

而且我在視圖A中有一個框架(0,0,50,50)的按鈕, 和一個框架視圖(200,200,50,50)的按鈕。

視圖A和視圖B都有nil backgroundColor(所以它們都是透明的)。

而且所有的視圖都有相同的框架。

我希望能夠點擊兩個按鈕,但只有從視圖B的按鈕是可點擊的。 iOS 6的情況並非如此。

任何想法?

醜陋的解決方案:

我找到了解決我的問題,我所要做的就是讓我的觀點A和視圖B是一個PassThroughUIView,但是這是一個非常醜陋的解決方案,我不知道是否有一個更好的一個,不涉及改變我的觀點班。

@implementation PassThroughUIView 

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    for (UIView *v in self.subviews) { 
     CGPoint localPoint = [v convertPoint:point fromView:self]; 
     if (v.alpha > 0.01 && ![v isHidden] && v.userInteractionEnabled && [v pointInside:localPoint withEvent:event]) 
      return YES; 
    } 
    return NO; 
} 

@end 
+0

「通過視通」只是檢查的任何視圖是否重疊按鈕,通過改變視圖的背景顏色。 –

+0

你是否添加了任何手勢識別器(UITapGestureRecognizer或任何)? – karthika

+0

這就是說,視圖A與主視圖重疊,而視圖B是重疊視圖A(它們都具有相同的大小),並且我仍然希望它能夠工作。 –

回答

2

我想出的唯一解決辦法是子類的UIView並實現這一點:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    for (UIView *v in self.subviews) { 
     CGPoint localPoint = [v convertPoint:point fromView:self]; 
     if (v.alpha > 0.01 && ![v isHidden] && v.userInteractionEnabled && [v pointInside:localPoint withEvent:event]) 
      return YES; 
    } 
    return NO; 
} 

這UIView的將是一個