如何仅添加一次 view.addGestureRecognizer



每次viewWillAppear它调用时 self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())以添加手势识别器。

如何检查我是否尚未添加识别器?我知道我可以把它移到viewDidLoad,但这不是我想要的。

您可以检查手势实例是否存在,如下所示

 self.view.gestureRecognizers?.contains(yourgestureInstance)

self.view.gestureRecognizers给出已添加到视图中的所有gestureRecognizers的数组。

每当

你的viewController出现在屏幕上时,viewWillAppear:都会调用。

viewDidLoad:只会被调用一次。

如果您不想将代码移动到viewDidLoad:在这种情况下,请将一个布尔变量添加到您的 ViewController 中。

Delcare isRevealPanGastureAdded viewDidLoad:之外的变量

var isRevealPanGastureAdded : Bool = false

viewWillAppear:写下面的代码。

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated);
        //this will be called only once                 
        if self.isRevealPanGastureAdded == false {
        self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
        self.isRevealPanGastureAdded = true;
        }
    }

1)您可以添加布尔属性来检测之前调用viewWillAppear

2)您可以将添加的手势识别器存储在属性中,如果不nil请不要再次添加

3)您可以在viewWillDisappear/viewDidDisappear中删除添加的手势识别器

最新更新