UIGestureRecognizer не освобождается - PullRequest
0 голосов
/ 15 марта 2019

У меня есть подкласс 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)
    }
}

Это всего лишь часть кода, возможно, он абсолютно бесполезен в реальном приложении, но этого достаточно, чтобы повторить проблему.

Заранее спасибо!

...