Предположим, у меня есть подкласс 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..
}
Примечания:
bigUIView Супервизор
относится к свойству представления UIViewController , распространяет ли оно событие касания на все это? s subviews?
bigUIView
должен иметь userInteractionEnabled = YES
, потому что он также обрабатывает ввод данных пользователем.
/ smallImageView
в спереди, потому что он будет отображаться над основными игровыми объектами (подслои bigUIView
). Заранее спасибо.