Отмена событий UITouch, когда представление покрыто модальным UIViewController - PullRequest
0 голосов
/ 28 марта 2010

Я пишу приложение, в котором пользователь должен перемещать какие-то объекты на экране пальцами и бросать их. Для этого я использую функцию 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, когда его события касания прерываются модальным представлением?

1 Ответ

0 голосов
/ 28 марта 2010

Если вы контролируете, когда отображается модальное представление, можете ли вы одновременно отправить уведомление, чтобы сообщить остальной части вашего приложения, что они должны сбросить перемещенное представление?

...