Предположим, у меня есть подкласс UIViewController, который заботится о некоторых UIViews. Эти UIViews добавляются как подпредставления свойства 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];
...
}
AFAIK, поскольку bigUIView
является самым передним видом и охватывает весь экран, он получит touchesBegan:withEvent:
, а другие виды, например button
, не получат никакого сенсорного события.
В моем приложении bigUIView
должно быть самым верхним представлением, поскольку оно содержит основные объекты пользовательского интерфейса (фактически, CALayers, основные игровые объекты), которые при анимации должны быть поверх всех других вторичных элементов пользовательского интерфейса (UIButtons так далее). Однако я хотел бы иметь возможность иметь кнопки UIB и другие объекты в цепочке ответчика.
Я попытался реализовать следующее в 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
).
Заранее спасибо.