Я пишу приложение, в котором пользователь должен перемещать какие-то объекты на экране пальцами и бросать их. Для этого я использую функцию 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");
}
Но когда я тестирую приложение и запускаю модальное диалоговое окно, следующий вывод выводится в журнале выполнения.
[Сессия началась в 2010-03-27
16:17:14 -0700.] 2010-03-27
16: 17: 18,831
modelTouchCancel [2594: 207]
touchsBegan 2010-03-27 16: 17: 19.485
modelTouchCancel [2594: 207]
touchsMoved 2.000000 2010-03-27
16: 17: 19,504
modelTouchCancel [2594: 207]
touchsMoved 4.000000 2010-03-27
16: 17: 19,523
modelTouchCancel [2594: 207]
touchsMoved 16.000000 2010-03-27
16: 17: 19,538
modelTouchCancel [2594: 207]
touchsMoved 26.000000 2010-03-27
16: 17: 19,596
modelTouchCancel [2594: 207]
touchsMoved 68.000000 2010-03-27
16: 17: 19,624
modelTouchCancel [2594: 207]
touchsMoved 85.000000 2010-03-27
16: 17: 19,640
modelTouchCancel [2594: 207]
touchsMoved 125.000000 2010-03-27
16: 17: 19,641
modelTouchCancel [2594: 207] Показать модальное
Любые предложения о том, как сбросить состояние UIView, когда его события касания прерываются модальным представлением?