在我的tvOS应用程序中,我有一个包含代表电影的单元格的集合视图。
我在视图中附加了2个手势识别器:
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
仍在使用"使用"?或者类似的东西。在这一点上,我不知道。
答案 0 :(得分:0)
正如在这里发生的那样,我在UITapGestureRecognizer
周围进行了许多测试以及它停止工作的原因。我发现如果你有约束冲突这种情况频繁发生, autolayout 解决了这些问题,但这并不是永远存在的,必定没有冲突。
此外,如果您在代码的任何部分setTranslatesAutoresizingMaskIntoConstraints
为false,则可以解决此问题。
答案 1 :(得分:0)
我在 tvOS 上使用手势识别器体验怪异。在我的情况下,由于某种原因,该应用程序表现得好像手势识别器在容器视图被解除后挥之不去。奇怪的是,我在启动和关闭AVPlayerViewController
几次时也发现了怪异。
我采取的措施是删除手势识别器的使用并改为覆盖pressesEnded
方法。
我希望这会有所帮助。