サンプルコード


点滅ライトの設定変更への対応


人が Apple デバイスの点滅ライトを薄暗くすることを選択した場合に、あなたの UI を調整して下さい。


Download


iOS 16.4+ iPadOS 16.4+ Xcode 14.3+




概観


薄暗く点滅するライトは、Apple デバイスで明るく頻繁に光が点滅するのを避けたいことを人が示すことができる設定です。人がこの設定をオンにすると、システムがフラッシュまたはストロボ効果を検出したときに、デバイスはビデオコンテンツを自動的に薄暗くします。


あなたのアプリでは、この設定の現在の値を確認し、値が変更されたときにあなたの UI に必要な調整を加えることができます。たとえば、このサンプルコードプロジェクトは、ビデオのどの部分に点滅ライトが含まれているかを示すカスタムメディアタイムラインを描画する方法を示しています。この設定に応じてあなたの UI に加えられるその他の変更例については、ライトの点滅 を参照してください。


重要


このサンプルコードプロジェクトには、一連の点滅効果を含むサンプルビデオが含まれています。




サンプルコードプロジェクトの構成


このサンプルコードプロジェクトは、システム設定の変更に依存しています。サンプルアプリの UI の変化を観察するには、いつでも [薄暗く点滅するライト] 設定の値を変更し、アプリに戻って UI がどのように反応するかを観察します。


設定を変更するには、[設定(Setting)] > [アクセシビリティ(Accessibility)] > [モーション(Motion)] を開き、[薄暗く点滅するライト] をオンにします。



薄暗く点滅させてビデオを再生


薄暗く点滅するライトをオンにして、ビデオプレーヤーでサンプルビデオを再生します。サンプルアプリでは、AVPlayer のビデオの下にカスタムメディアタイムラインが表示されます。このタイムラインには、ライトが点滅する危険性が高いサンプルビデオのセグメントに注釈が付けられます。



  1. ForEach(videoFlashingTimes, id: \.self) { timeRange in
  2. // Draws red rectangles to indicate which segments of the video
  3. // contain flashing light effects. The position relies on the
  4. // start and end times of each segment in `videoFlashingTimes`.
  5. RoundedRectangle(cornerRadius: 2)
  6. .fill(.red)
  7. .position(x: (timeRange[0] * width) + ((timeRange[1] * width) - (timeRange[0] * width)) / 2)
  8. .frame(width: (timeRange[1] * width) - (timeRange[0] * width), height: 10)
  9. }


ビデオの再生がこれらのセグメントのいずれかに達すると、システムは自動的にビデオを薄暗くして点滅効果を減らします。



ライトの点滅設定の変更を登録


このサンプルアプリは、薄暗く点滅するライトの設定がオンになっている場合にのみカスタムメディアタイムラインを描画します。これは、アプリがシステム通知を通じて決定します。まず、アプリは メディア アクセシビリティ (Media Accessibility) フレームワークをインポートして API を操作します。



import MediaAccessibility


次に、kMADimFlashingLightsChangedNotification 通知を受信するように登録します。この通知は、人が設定をオンまたはオフにしたときにシステムから送信されます。


アプリが kMADimFlashingLightsChangedNotification 通知を受信すると、変数 dimFlashingLightsStatus をシステム設定の現在の値に設定します。この値は、システムが MADimFlashingLightsEnabled() を通じて報告します。


  1. @objc
  2. func dimFlashingLightsChanged(_ notification: Notification) {
  3. // Updates `dimFlashingLightsStatus` to the new value of the
  4. // Dim Flashing Light setting.
  5. dimFlashingLightsStatus = MADimFlashingLightsEnabled()
  6. }


設定がオンの場合、カスタムメディアタイムラインを描画


アプリはその UI を描画するときに、現在の設定状況の dimFlashingLightsStatus の値をチェックして、カスタムメディアタイムラインを描画するかどうかを決定します。


  1. // Checks the status of the Dim Flashing Lights setting to determine
  2. // whether to draw the custom media timeline.
  3. if playerManager.dimFlashingLightsStatus {
  4. VStack {
  5. Text("Custom Media Timeline")
  6. .font(.title2)
  7. .padding(.bottom)
  8. GeometryReader { proxy in
  9. // Draws a timeline view that's the same width as the
  10. // video player.
  11. FlashingTimelineView(proxy.size.width)
  12. // Draws a custom playback indicator on top of the
  13. // timeline view.
  14. RoundedRectangle(cornerRadius: 2)
  15. .fill(.black)
  16. .border(.white)
  17. .position(x: playerManager.playbackPercentage * proxy.size.width)
  18. .frame(width: 9, height: 9)
  19. }
  20. }
  21. .padding(.top)
  22. }


設定をオフにすると、サンプルアプリの UI が更新され、カスタムメディアタイムラインが削除されます。






トピックス


薄暗く点滅するライト


func MADimFlashingLightsEnabled() -> Bool

デバイスでライトの点滅設定が有効かどうかを示すブール値を返します。


let kMADimFlashingLightsChangedNotification: CFString

人がデバイスの点滅ライトの設定を変更したときに投稿される通知。


class MAFlashingLightsProcessor

フレームバッファ オブジェクトを処理して、一連の点滅ライトを検出して暗くするクラス。















トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ