RemoveGestureRecognizer – SWIFT 3

Sunt într-o situație destul de inedită în care pe un subview – fullScreenConnectView –  am definit în viewDidLoad un TapGestureRecognizer pe care l-am atașat subview-ului.

        let gestureClickFullScreen = UITapGestureRecognizer(target: self, action:  #selector(self.connectClickFullScreen(_:)))

        self.fullScreenConnectView.addGestureRecognizer(gestureClickFullScreen)

Totul e bun și frumos însă trebuie la un moment dat sa elimin acest GestureRecognizer pe care l-am adaugat în viewDidLoad. Nu mai am de-a face cu instanța de UITapGestureRecognizer, aceasta existând doar în viewDidLoad. Poate o soluție pentru eliminarea TapGestureRecognizer este să-l declarat global. Însă am căutat o cale prin care să elimin acest TapGestureRecognizer fără să am acea instanță ținută inutil pe tot parcursul aplicației.

O soluție la îndemână pentru această problemă este: 

        self.fullScreenConnectView.gestureRecognizers?.forEach(self.fullScreenConnectView.removeGestureRecognizer)

Acest lucru este posibil deoarece agregatorul UIView.gestureRecognizers este în IOS 10 un vector, deci numai bun de parcurs și eliminat din el tot ce este în plus. 

    public var gestureRecognizers: [UIGestureRecognizer]?

Pe baza acestei ultime observații putem scrie un cod mai puțin swifty sub forma:

for recognizer in subview.gestureRecognizers ?? [ ] {
subview.removeGestureRecognizer(recognizer)
}

Share Button

Stefan

Leave a Reply

Your email address will not be published. Required fields are marked *