Я пишу приложение, в котором пользователь должен двигать пальцами что-то по экрану и опускать их. Для этого я использую функцию touchesBegan, touchesEnded ... каждого представления, которое нужно переместить.
Проблема в том, что иногда представления покрываются представлением, отображаемым с помощью функции [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");
}
Но когда я тестирую приложение и вызываю модальное диалоговое окно для отображения, в журнале выполнения выводятся следующие данные.
[Сессия началась 27 марта 2010 г., 16:17:14 -0700.] 27 марта 2010 г. 16: 17: 18.831 modelTouchCancel [2594: 207] touchesBegan 27.03.2010 16: 17: 19.485 modelTouchCancel [2594: 207 ] touchesMoved 2.000000 2010-03-27 16: 17: 19.504 modelTouchCancel [2594: 207] TouchMoved 4.000000 2010-03-27 16: 17: 19.523 modelTouchCancel [2594: 207] touchesMoved 16.000000 2010-03-27 16: 17: 19.538 modelTouchCancel [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] touchMoved 85.000000 27.03.2010 16: 17: 19.640 modelTouchCancel [2594: 207] touchesMoved 125.000000 27.03.2010 16: 17: 19.641 modelTouchCancel [2594: 207] Показать модальное окно
Любые предложения о том, как сбросить состояние UIView, когда его события касания прерываются модальным представлением?