У меня есть представление, что при получении двойного выстрела, отправляет уведомление корневому контроллеру, кто по очереди удаляет и выпускает представление.
Проблема состоит в том, что после того, как представление было выпущено, оно получает другое отложенное событие 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, кажется, выпущен в корректное время.
Вопрос состоит в том, почему это дополнительное событие жеста прибывает.
Задержанные жесты по определению отправляются с небольшой задержкой. Это (UIScrollViewDelayedTouchesBeganGestureRecognizer) используется для обеспечения более высокого приоритета жестов сжатия и панорамирования.
Распознаватель жестов не сохраняет свое состояние, чтобы избежать цикла сохранения. Следовательно, когда этот распознаватель срабатывает, он отправляет освобожденное представление.
Вы можете отложить -выпуск
представления (например, с помощью -performSelector: withObject: afterDelay:
). Или вместо того, чтобы убрать представление, вы можете просто установить его скрытым
.