在tvOS中播放/暂停UICollectionViewCell的远程键

时间:2018-10-01 06:49:10

标签: swift uicollectionview tvos apple-tv

我的要求是,在聚焦单元格时直接通过按播放/暂停远程键直接播放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)

1 个答案:

答案 0 :(得分:2)

将您的UITapGestureRecognizer而不是UICollectionViewCell添加到AVPlayerUICollectionViewCell将成为捕获焦点的元素。

在单元格焦点上添加UITapGestureRecognizer,并在单元格失去焦点时将其删除。

UICollectionViewCelloverride 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中呼叫该单元拥有的播放器上的播放/暂停。