diff --git a/Sora/SwiftUIVideoView.swift b/Sora/SwiftUIVideoView.swift index 6bff1643..031f3822 100644 --- a/Sora/SwiftUIVideoView.swift +++ b/Sora/SwiftUIVideoView.swift @@ -9,6 +9,10 @@ public struct SwiftUIVideoView: View where Background: View { private var stream: MediaStream? private var background: Background + // TODO(zztkm): わかりやすいコメントを書く + // 親 View で定義された stopVideo 変数と接続するための変数 + @Binding private var stopVideo: Bool? + @ObservedObject private var controller: VideoController /** @@ -16,8 +20,8 @@ public struct SwiftUIVideoView: View where Background: View { - parameter stream: 描画される映像ストリーム。 nil の場合は何も描画されません */ - public init(_ stream: MediaStream?) where Background == EmptyView { - self.init(stream, background: EmptyView()) + public init(_ stream: MediaStream?, stopVideo: Binding? = nil) where Background == EmptyView { + self.init(stream, background: EmptyView(), stopVideo: stopVideo) } /** @@ -26,9 +30,10 @@ public struct SwiftUIVideoView: View where Background: View { - parameter stream: 描画される映像ストリーム nil の場合は何も描画されません - paramater background: 映像のクリア時に表示する背景ビュー */ - public init(_ stream: MediaStream?, background: Background) { + public init(_ stream: MediaStream?, background: Background, stopVideo: Binding?) { self.stream = stream self.background = background + self._stopVideo = stopVideo controller = VideoController(stream: stream) } @@ -40,6 +45,9 @@ public struct SwiftUIVideoView: View where Background: View { RepresentedVideoView(controller) .opacity(controller.isCleared ? 0 : 1) } + .onChange(of: stopVideo, initial: true) { newValue in + videoStop(newValue) + } } /** @@ -81,7 +89,7 @@ public struct SwiftUIVideoView: View where Background: View { 映像の描画を停止します。 TODO(zztkm): State で更新できるか確認する */ - public func videoStop(_ flag: Bool) -> SwiftUIVideoView { + private func videoStop(_ flag: Bool) -> SwiftUIVideoView { print("kensaku: videoStop(\(flag))") if flag { controller.videoView.stop()