У меня есть подкласс UIGestureRecognizer
, который я добавляю к viewController.view
, а затем, когда я вызываю removeGestureRecognizer
, он не освобождается, и я понятия не имею, почему.
Я не могу понять, кто все еще хранит экземпляр, у меня нет какой-либо переменной экземпляра или чего-то подобного, которая его хранит, только представление viewController и, согласно документации, при вызове removeGestureRecognizer
он должен освободить жест, но это не так.
Надеюсь, кто-нибудь может мне помочь разобраться в этом.
ViewController
class ViewController: UIViewController, CustomGestureRecognizerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.view.addGestureRecognizer(CustomGestureRecognizer(delegate: self))
}
func customGestureRecognizerDidDectectTouch(_ customGestureRecognizer: CustomGestureRecognizer) {
print("customGestureRecognizerDidDectectTouch")
self.view.removeGestureRecognizer(customGestureRecognizer)
}
}
Подкласс UIGestureRecognizer
protocol CustomGestureRecognizerDelegate: class {
func customGestureRecognizerDidDectectTouch(_ customGestureRecognizer: CustomGestureRecognizer)
}
class CustomGestureRecognizer: UIGestureRecognizer {
deinit {
print("deinit CustomGestureRecognizer")
}
private weak var customDelegate: CustomGestureRecognizerDelegate?
init(delegate: CustomGestureRecognizerDelegate) {
self.customDelegate = delegate
super.init(target: nil, action: nil)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
touchDetected()
super.touchesBegan(touches, with: event)
}
private func touchDetected() {
customDelegate?.customGestureRecognizerDidDectectTouch(self)
}
}
Это всего лишь часть кода, возможно, он абсолютно бесполезен в реальном приложении, но этого достаточно, чтобы повторить проблему.
Заранее спасибо!