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

StackOverflow https://stackoverflow.com/questions/2531342

Вопрос

Я пишу приложение, в котором пользователь должен перемещать некоторые объекты на экране пальцами и бросать их.Для этого я использую 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] Touchesbegan 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 16: 17: 19.538. [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] Touchsmuced 85.000000 2010-03-27 17: 19.640 ModeltouchCancel [2594: 207] TouchsMoved 125.000000 2010-03-27 16: 17: 19.641 ModeltouchCancel [2594: 207] Показать модальный

Есть какие-нибудь предложения о том, как сбросить состояние UIView, когда его события касания прерываются модальным представлением?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top