UIGestureRecognizer在首次使用后停止工作

时间:2016-05-14 09:08:00

标签: ios swift uigesturerecognizer tvos

在我的tvOS应用程序中,我有一个包含代表电影的单元格的集合视图。

我在视图中附加了2个手势识别器:

  1. 转到选择点按的电影详情
  2. 直接播放电影(使用Apple TV Remote专用播放按钮)
  3.     let posterTap = UITapGestureRecognizer(target: self, action: #selector(ListViewController.movieSelect(_:)))
        posterTap.allowedPressTypes = [NSNumber(integer: UIPressType.Select.rawValue)]
        self.view.addGestureRecognizer(posterTap)
    
        let posterPlay = UITapGestureRecognizer(target: self, action: #selector(ListViewController.moviePlay(_:)))
        posterPlay.allowedPressTypes = [NSNumber(integer: UIPressType.PlayPause.rawValue)]
        self.view.addGestureRecognizer(posterPlay)
    

    和受尊重的方法

    func movieSelect(gesture: UITapGestureRecognizer) {
        if let cell = UIScreen.mainScreen().focusedView as? ItemCollectionViewCell {
            let item = ItemViewController(nibName: "ItemViewController", bundle: nil)
            item.item = cell.data
            self.presentViewController(item, animated: true, completion: nil)
        }
    }
    
    func moviePlay(gesture: UITapGestureRecognizer) {
        if let cell = UIScreen.mainScreen().focusedView as? ItemCollectionViewCell {
            let data = cell.data
            // TLDR;
            // Passing data to AVPlayerViewController and presenting it + start playing the movie.
        }
    }
    

    除了我停止播放电影并返回列表(通过关闭AVPlayerViewController)时,一切似乎都有效,我的第二个手势识别器(播放按钮)不再有效。如果我使用print(self.view.gestureRecognizers)查看它仍然存在,但无论如何都不会再次调用moviePlay()

    有没有办法调试这个?什么可能导致这个问题?我认为这是由于UIGestureRecognizerState仍在使用"使用"?或者类似的东西。在这一点上,我不知道。

2 个答案:

答案 0 :(得分:0)

正如在这里发生的那样,我在UITapGestureRecognizer周围进行了许多测试以及它停止工作的原因。我发现如果你有约束冲突这种情况频繁发生, autolayout 解决了这些问题,但这并不是永远存在的,必定没有冲突。
此外,如果您在代码的任何部分setTranslatesAutoresizingMaskIntoConstraints为false,则可以解决此问题。

答案 1 :(得分:0)

我在 tvOS 上使用手势识别器体验怪异。在我的情况下,由于某种原因,该应用程序表现得好像手势识别器在容器视图被解除后挥之不去。奇怪的是,我在启动和关闭AVPlayerViewController几次时也发现了怪异

我采取的措施是删除手势识别器的使用并改为覆盖pressesEnded方法。

我希望这会有所帮助。