an が終了から 1 秒のときにaCABasicAnimation
を anに追加する必要があります(playerItem の期間 - 1)。基本的なクロスフェードです。適切な時間に到着したかどうかを判断する方法がわかりません。以下のコードを使用して、定期的な時間オブザーバーを追加しました。playerItem が終了から 1 秒になったことを知る方法はありますか?AVPlayerLayer
AVQueuePlayer
playerItem
timeObserverToken = player?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main) { [unowned self] time in
let fadeOutTime = CMTime(seconds: 1, preferredTimescale: time.timescale)
let duration = self.currentItem()?.duration
let convertedDuration = CMTimeConvertScale(duration!, time.timescale, .default)
if CMTimeCompare(time, CMTimeSubtract(convertedDuration, fadeOutTime)) == 0 {
self.playerLayer.add(self.fadeOut, forKey: "fadeOut")
}
}