Освобожденный объект, получающий сообщение UIGestureRecognizer

У меня есть представление, что при получении двойного выстрела, отправляет уведомление корневому контроллеру, кто по очереди удаляет и выпускает представление.

Проблема состоит в том, что после того, как представление было выпущено, оно получает другое отложенное событие GestureRecognizer.

Следующее является информацией от 'Инструментов':

Category        Event Type  RefCt   Timestamp   Address      Size   Responsible Library Responsible Caller
UIScrollView    Zombie          -1  00:06.166   0x55496a0    0                   UIKit  -[UIGestureRecognizer _updateGestureWithEvent:]


   0 CoreFoundation ___forwarding___
   1 CoreFoundation _CF_forwarding_prep_0
   2 UIKit -[UIGestureRecognizer _updateGestureWithEvent:]
   3 UIKit -[UIGestureRecognizer _delayedUpdateGesture]
   4 UIKit _UIGestureRecognizerUpdateObserver
   5 UIKit _UIGestureRecognizerUpdateGesturesFromSendEvent
   6 UIKit -[UIWindow _sendGesturesForEvent:]
   7 UIKit -[UIWindow sendEvent:]
   8 UIKit -[UIApplication sendEvent:]
   9 UIKit _UIApplicationHandleEvent
  10 GraphicsServices PurpleEventCallback
  11 CoreFoundation CFRunLoopRunSpecific
  12 CoreFoundation CFRunLoopRunInMode
  13 GraphicsServices GSEventRunModal
  14 GraphicsServices GSEventRun
  15 UIKit UIApplicationMain
  16 ipadapp main /Users/test/Projects/app/ipadapp/main.m:7
  17 ipadapp start

UIScrollView, кажется, выпущен в корректное время.

Вопрос состоит в том, почему это дополнительное событие жеста прибывает.

5
задан LK. 12 May 2010 в 14:45
поделиться

1 ответ

Задержанные жесты по определению отправляются с небольшой задержкой. Это (UIScrollViewDelayedTouchesBeganGestureRecognizer) используется для обеспечения более высокого приоритета жестов сжатия и панорамирования.

Распознаватель жестов не сохраняет свое состояние, чтобы избежать цикла сохранения. Следовательно, когда этот распознаватель срабатывает, он отправляет освобожденное представление.

Вы можете отложить -выпуск представления (например, с помощью -performSelector: withObject: afterDelay: ). Или вместо того, чтобы убрать представление, вы можете просто установить его скрытым .

0
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: