WKWebViewで動画がフルスクリーン再生された時、止まった時に処理を行う

はじめに

youtube-ios-player-helperを使わずに動画再生を行うという用件があり、かつ再生前と停止中に動画の上に画像を配置する必要がありだいぶ苦しんだので足跡として残しておきます。

解決策

前提として動画再生用のWebViewを用意して特定の領域に配置、再生中はフルスクリーンで表示が行われるような実装でした。

Webページの中で動画再生のタップ処理をなんとかして取ろうとしていたのですが、なかなか難しく知見も転がっていなかったのでめちゃくちゃハマりました。

視点を変えてインライン再生でなければ動画再生は新しくUIWindowが開くことに気づきました。
そこで、UIWindowのNotificationには表示された時、閉じた時の通知が取れるのでそれで引っ掛けることで解決しました。

NotificationCenter.default.addObserver(self,
                                       selector: #selector(didBecomeVisibleNotification),
                                       name: UIWindow.didBecomeVisibleNotification,
                                       object: nil)

NotificationCenter.default.addObserver(self,
                                       selector: #selector(didBecomeHidden),
                                       name: UIWindow.didBecomeHiddenNotification,
                                       object: nil)


@objc func didBecomeVisibleNotification() {
    // 動画の上に載っている再生ボタンを非表示にする
}

@objc func didBecomeHidden() {
    // 動画の上に載っている再生ボタンを表示する
}

参考文献

How to detect AVplayer and get url of current video from WKWebView?

WKWebViewの動画再生について~UIWindowDidBecomeHiddenNotification~