5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

addPeriodicTimeObserverを使う際のメモ

Posted at

開発環境

  • XCode9
  • Swift4
  • iOS11

AVPlayerを利用する際にUISliderを再生時間に合わせて動かすというよくあるやつですが、addPeriodicTimeObserverを使いますが、非同期処理を行うので、弱参照を意識しないと駄目なようです。

timeObserverToken = appDelegate.player?.addPeriodicTimeObserver(forInterval: time, queue: nil) { [weak self] (time) in
            guard let `self` = self else {
                return
            }
            
            // slider の位置更新
            // label の再生時間更新
            }

addPeriodicTimeObserverを使う場合はremoveTimeObserverも呼び出すようにしないとずっと非同期処理が走るみたいですので、再生が終わったらremoveTimeObserverを呼び出します。

if let _timeObserverToken = timeObserverToken {
            appDelegate.player?.removeTimeObserver(_timeObserverToken)
            self.timeObserverToken = nil
        }

参考サイト
addPeriodicTimeObserver(forInterval:queue:using:)
Appleの公式で弱参照にしろよって解説があった。ついでにqueueにnilをすると、dispatch_get_main_queue()を使うようです。

AVFoundationPiPPlayer
addPeriodicTimeObserverを使ったアプリのAppleのサンプル

Swiftの"[weak self]"にアクセスする時に"if let weakSelf = self"とか"self?"を書きたくない人へ
すごく参考になりました。self?の?が無くなるのでロジック的にもソース的にも楽。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?