UIView, его супервизор и touchBegan:

Предположим, у меня есть подкласс UIViewController, который заботится о некоторых UIViews. Эти UIViews добавляются как подвиды свойства UIViewController view ):

UIViewController:

- (void)viewDidLoad {
    UIImageView *smallImageView...
    [self.view addSubview:smallImageView];

    UIButton *button..
    [self.view addSubview:button];

    UIView *bigUIView.. // covers the entire screen (frame = (0.0, 0.0, 1024.0, 768.0))
    [self.view addSubview:bigUIView];
...
}

AFAIK, поскольку bigUIView является самым передним представлением и покрывает весь экран, он будет получить touchesBegan: withEvent: и другие представления, такие как кнопка , не будут получать никаких событий касания.

В моем приложении bigUIView должен быть самым верхним представлением, потому что он содержит основное объекты пользовательского интерфейса (CALayers, фактически, основные игровые объекты), которые при анимации должны находиться поверх всех других вторичных элементов пользовательского интерфейса (UIButtons и т. д.). Однако я бы хотел, чтобы UIButtons и другие объекты по-прежнему оставались в цепочке респондентов.

Я попытался реализовать следующее в классе bigUIView :

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {    
    [self.superview touchesBegan:touches withEvent:event];

    ... hit test the touch for this specific uiview..
}

Примечания:

  1. bigUIView Супервизор относится к свойству представления UIViewController , распространяет ли оно событие касания на все это? s subviews?
  2. bigUIView должен иметь userInteractionEnabled = YES , потому что он также обрабатывает ввод данных пользователем.
  3. Я не могу перенести кнопку / smallImageView в спереди, потому что он будет отображаться над основными игровыми объектами (подслои bigUIView ).

Заранее спасибо.

6
задан David Gelhar 7 February 2011 в 16:12
поделиться