2012-05-02 2 views
0

У меня есть viewcontroller, который через «[self.view addSubview: secondView.view]» добавляет второе представление. Проблема в том, что второе представление добавляется за пределами половины.addSubview вне представления

secondView = [[SecondView alloc] initWithFrame: CGRectMake (-160, 0, 320, 460)]; 
[self.view addSubview: secondView.view]; " 

Я заметил, однако, что часть до 0 (-160) не является взаимозаменяемой. Это нормально? есть ли способ решить?

Спасибо!

+0

Самое простое решение - разместить оба вида в прозрачном контейнере. То, что вы хотите, невозможно проверить документами для [UIView] (http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-BBCCAICB) ** hitTest: withEvent: ** –

ответ

1

Я боюсь, что с учетом того, как работает цепочка UIResponder, то, что вы хотите, напрямую не возможно (супервизор переходит только к своим подвидным событиям, которые он распознает как влияющие на себя).

С другой стороны, если вам действительно нужно иметь этот вид вне рамки его родителя, вы можете связать распознаватель жестов (reference) с подвью. Действительно, распознаватели жестов обрабатываются вне обычной диспетчеризации событий касания, и они должны работать.

Попробуйте для крана:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
[secondView addGestureRecognizer:singleTap]; 
+0

ok, я попробую, спасибо – Vins

6

Вы можете позволить подвиды получить штрихи вне границ родителя путем переопределения pointInside:withEvent: для родительского вида.

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    BOOL pointInside = NO; 

    // step through our subviews' frames that exist out of our bounds 
    for (UIView *subview in self.subviews) 
    { 
     if(!CGRectContainsRect(self.bounds, subview.frame) && [subview pointInside:[self convertPoint:point toView:subview] withEvent:event]) 
     { 
      pointInside = YES; 
      break; 
     } 
    } 

    // now check inside the bounds 
    if(!pointInside) 
    { 
     pointInside = [super pointInside:point withEvent:event]; 
    } 

    return pointInside; 
} 
Смежные вопросы