Разработка iPhone/iPod touch приложений: Отключение touch событий.
[sourcecode language='objc'] //Отключаем все события для view self.view.userInteractionEnabled = NO; [/sourcecode]
Либо создавал дополнительный прозрачный transparentView . Кстати, такой подход позволяет иногда добиться неплохих результатов, особенно, в случае, если данный transparentView не пустой, а полупрозрачный, и содержит, например, “крутяшку”, и текст “Loading…”.
[sourcecode language='objc']
UIView * transparentView = [[[UIView alloc]
initWithFrame:CGRectMake(0,0,320,480)] autorelease];
transparentView.userInteractionEnabled = YES;
//Иногда, если ставишь alpha == 0, не работает
transparentView.alpha = 0.01;
[self.view.window addSubview:transparentView];
[/sourcecode]
И это еще не все. При желании для наших целей можно использовать перегрузку метода -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent*)event
[sourcecode language='objc']
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
// метод должен возвращать самый "глубокий" view, но
// т.к. нам совсем не нужно, чтобы события обрабатывались
// всеми view'ами, то единственным, кто их будет обрабатывать
// будет текущий view(self)
return self;
}
[/sourcecode]
Один способ лучше другого ;) Но, как оказалось, есть еще один, более простой способ запретить обработку ВСЕХ touch событий
[sourcecode language='objc'] // Выключаем обработку ВСЕХ touch событий [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; // А теперь - включаем обратно [[UIApplication sharedApplication] endIgnoringInteractionEvents]; [/sourcecode]
Непонятный exclusiveTouch
Должен немного еще сказать о свойстве UIView.exсlusiveTouch. Мне довелось некоторое время с ним помучаться. Так, если выходить из того, что написано в документации, то можно, якобы содать view, который будет единственным, кто будет принимать события во всем window. Однако не все так хорошо, как хотелось бы. На самом деле если выставить данное свойство в YES, то вы можете быть уверены лишь в том, что если в текущий момент этот UIView получает touch события, то больше ни один view в этом окне не сможет получать touch события. Вроде так. ;) Если кто-то думает иначе, то я буду рад услышать как все-таки обстоят дела с exсlusiveTouch. В любом случае, для задачи по отключению touch событий, это свойство мне не пригодилось.
Удачного программирования!







Евгений Дудник
в 10:22, 23.07.2009От меня небольшое уточнение.
На самом деле, когда блокируются все touch события методом
[[UIApplication sharedApplication] beginIgnoringInteractionEvents], инкрементируется счетчик блокирований. Поэтому нужно следить, чтобы метод [[UIApplication sharedApplication] endIgnoringInteractionEvents] вызывался столько же раз, сколько и beginIgnoringInteractionEvents.
Pepper
в 8:50, 12.04.2011Real brain power on display. Thanks for that asnrwe!
Разработка iPhone/iPod touch приложений. Использования индикатора загрузки UIActivityIndicatorView. < Stanfy Блог
в 10:02, 26.05.2009[...] нажатий. Об этом уже писал Павел Тайкало в статье Разработка iPhone/iPod touch приложений: Отключение touch событи…. код наведен [...]