2013-10-04 4 views
1

У меня есть 2 вида в качестве подзонов основного вида.iOS 7 - прозрачный распознаватель жестов UIView

основной вид | | --- view A | | --- вид B

И у меня есть кнопка с рамкой (0, 0, 50, 50) на вид A, и кнопка с рамкой (200, 200, 50, 50) в поле зрения B.

View A и вид B имеют нулевой backgroundColor (поэтому они оба прозрачные).

И все виды имеют одинаковую рамку.

Я хочу, чтобы иметь возможность нажимать обе кнопки, но только кнопка из вида B можно щелкнуть. Это не относится к iOS 6.

Любые идеи?

Гадкое решение:

Я нашел решение моей проблемы, все, что нужно сделать, это мой взгляд и вид 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 будет «Проход через зрения»

Смежные вопросы