Я пишу приложение, в котором пользователь должен перемещать некоторые вещи на экране пальцами и бросать их. Для этого я использую функцию touchhesBegan, touchesEnded ... для каждого вида, которое нужно переместить.Отмена событий UITouch, когда вид закрыт по модулю UIViewController
Проблема заключается в том, что иногда виды охватываются видом, отображаемым с помощью функции [UIViewController presentModalViewController]. Как только это произойдет, UIView, который я двигал, перестает получать события касания, поскольку он был закрыт. Но нет события, сообщающего мне, что он прекратил получать события, поэтому я могу сбросить состояние перемещенного представления.
Ниже приведен пример, демонстрирующий это. Эти функции являются частью UIView, которая отображается в главном окне. Он слушает прикосновение к событиям, и когда я перетаскиваю палец на некоторое расстояние, он представляет собой модальный вид, который охватывает все. В журнале запуска он печатает, какие события касаются.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touchesBegan");
touchStart=[[touches anyObject] locationInView:self];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint touchAt=[[touches anyObject] locationInView:self];
float xx=(touchAt.x-touchStart.x)*(touchAt.x-touchStart.x);
float yy=(touchAt.y-touchStart.y)*(touchAt.y-touchStart.y);
float rr=xx+yy;
NSLog(@"touchesMoved %f",rr);
if(rr > 100) {
NSLog(@"Show modal");
[viewController presentModalViewController:[UIViewController new] animated:NO];
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touchesEnded");
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touchesCancelled");
}
Но когда я тестирую приложение и запускаю отображаемое модальное диалоговое окно, следующим является вывод в журнале запуска.
[Сессия началась в 2010-03-27 16:17:14 -0700 .] 2010-03-27 16: 17: 18,831 modelTouchCancel [2594: 207] touchesBegan 2010-03-27 16: 17: 19,485 modelTouchCancel [2594: 207] touchesMoved 2.000000 2010-03-27 16: 17: 19,504 modelTouchCancel [2594: 207] touchesMoved 4.000000 2010-03-27 16: 17: 19,523 modelTouchCancel [ 2594: 207] touchhesMoved 16.000000 2010-03-27 16: 17: 19.538 модельTouchCancel [ 2594: 207] touchesMoved 26.000000 2010-03-27 16: 17: 19,596 modelTouchCancel [2594: 207] touchesMoved 68.000000 2010-03-27 16: 17: 19,624 modelTouchCancel [2594: 207] touchesMoved 85.000000 2010 -03-27 16: 17: 19,640 modelTouchCancel [2594: 207] touchesMoved 125.000000 2010-03-27 16: 17: 19,641 modelTouchCancel [2594: 207] Показать модальный
Любые предложения о том, как для сброса состояния UIView, когда его события касания прерываются модальным представлением?