Play / Pause дистанционная клавиша для UICollectionViewCell в tvOS - PullRequest
0 голосов
/ 01 октября 2018

Мое требование - воспроизводить фильмы с 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 голосов
/ 14 октября 2018

Добавьте 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 вызове воспроизведения / паузы на игрока, которому принадлежит клетка.

...