Отмена событий UITouch при просмотре, закрытом модальным контроллером UIViewController

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


person kkrizka    schedule 27.03.2010    source источник


Ответы (1)


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

person deanWombourne    schedule 28.03.2010