我的要求是,在聚焦单元格时直接通过按播放/暂停远程键直接播放UICollectionView
中的电影。
如果我们进入后台(通过按主屏幕按钮)并来到前台(或)展示viewcontroller
并关闭,这将是完美的工作。但是在正常情况下,它不起作用。
播放/暂停也不适用于自定义AVPlayer
,因为我没有使用avplayer
控件(此处的播放/暂停也与上述情况类似)
下面的相同代码
无论何时致电UICollectionViewCell
,我都会返回preferredFocusEnvironments
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier:SuggestionsCollectionViewCell.reuseIdentifier, for: indexPath) as! SuggestionsCollectionViewCell
let playPauseRecognizer = UITapGestureRecognizer(target: self, action: #selector(selectThisMagazineCell))
playPauseRecognizer.allowedPressTypes = [NSNumber(value: UIPressType.playPause.rawValue)]
playPauseRecognizer.numberOfTapsRequired = 1
cell.addGestureRecognizer(playPauseRecognizer)
return cell
}
对于AVPLayerViewController
类,我有以下用于播放/暂停的代码
let playPauseRecognizer = UITapGestureRecognizer(target: self, action: #selector(playPauseMenuButtonPressed))
playPauseRecognizer.allowedPressTypes = [NSNumber(value: UIPressType.playPause.rawValue)];
self.view.addGestureRecognizer(playPauseRecognizer)
答案 0 :(得分:2)
将您的UITapGestureRecognizer
而不是UICollectionViewCell
添加到AVPlayer
。 UICollectionViewCell
将成为捕获焦点的元素。
在单元格焦点上添加UITapGestureRecognizer
,并在单元格失去焦点时将其删除。
UICollectionViewCell
和override
didUpdateFocus
的子类以捕获焦点事件:
override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
super.didUpdateFocus(in: context, with: coordinator)
if isFocused {
// Add gesture
}
else {
// Remove gesture
}
}
然后,在您的playPauseMenuButtonPressed
func
中呼叫该单元拥有的播放器上的播放/暂停。