Предположим, у меня есть подкласс UIViewController, который заботится о некоторых UIView. Эти UIView добавляются как подпредставления свойства view
UIViewController):
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];
...
}
Насколько я знаю, поскольку bigUIView
является самым передним видом и покрывает весь экран, он получит touchesBegan:withEvent:
, а другие виды, такие как button
, не получат никаких событий касания.
В моем приложении 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
относится к свойствуview
UIViewController, распространяет ли оно событие касания на все его подпредставления? bigUIView
должен иметьuserInteractionEnabled = YES
, потому что он также обрабатывает пользовательский ввод.- Я не могу вывести
button
/smallImageView
на передний план, потому что они будут отображаться над основными игровыми объектами (подслоямиbigUIView
).
Заранее спасибо.