Skip to content

Commit

Permalink
View の状態が変わったときにSDKユーザー側で検知するためのハンドラを追加
Browse files Browse the repository at this point in the history
  • Loading branch information
zztkm committed Oct 8, 2024
1 parent 1e27b35 commit aa02b52
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 7 deletions.
26 changes: 25 additions & 1 deletion Sora/SwiftUIVideoView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ public struct SwiftUIVideoView<Background>: View where Background: View {
/**
画面を背景ビューに切り替えます。
このメソッドは描画停止時のみ有効です。
TODO(zztkm): State で更新できるか確認する
*/
public func videoClear(_ flag: Bool) -> SwiftUIVideoView<Background> {
if flag {
Expand All @@ -126,6 +125,24 @@ public struct SwiftUIVideoView<Background>: View where Background: View {
controller.videoView.handlers.onRender = perform
return self
}

/// 映像フレームの描画開始時に実行されるブロックを指定します。
public func videoOnStart(perform: @escaping () -> Void) -> SwiftUIVideoView<Background> {
controller.videoView.handlers.onDisconnect = perform
return self
}

/// 映像フレームの描画停止時に実行されるブロックを指定します。
public func videoOnStop(perform: @escaping () -> Void) -> SwiftUIVideoView<Background> {
controller.videoView.handlers.onAdded = perform
return self
}

/// 映像が backgroundView に切り替わったときに実行されるブロックを指定します。
public func videoOnClear(perform: @escaping () -> Void) -> SwiftUIVideoView<Background> {
controller.videoView.handlers.onClear = perform
return self
}
}

/*
Expand Down Expand Up @@ -159,6 +176,9 @@ private struct RepresentedVideoView: UIViewRepresentable {
controller.stream?.videoRenderer = uiView
}

/**
映像の描画を停止します。TODO(zztkm): method 名の検討 (stop start の toggle なので、stop はおかしいかも?
*/
private func stop(_ uiView: VideoView) -> VideoView {
if isStop {
uiView.stop()
Expand All @@ -168,6 +188,10 @@ private struct RepresentedVideoView: UIViewRepresentable {
return uiView
}

/**
画面を背景ビューに切り替えます。
このメソッドは描画停止時のみ有効です。
*/
private func clear(_ uiView: VideoView) -> VideoView {
if isClear {
uiView.clear()
Expand Down
18 changes: 12 additions & 6 deletions Sora/VideoView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,19 @@ public enum VideoViewConnectionMode {
case manual
}

// Video (SwiftUI 用) で使う
// SwiftUIVideoView (SwiftUI 用) で使う
/// :nodoc:
public struct VideoViewHandlers {
/// 映像のサイズ変更時に実行される
public var onChange: ((CGSize) -> Void)?
/// 映像フレーム描画時に実行される
public var onRender: ((VideoFrame?) -> Void)?
}
/// 映像フレームの描画開始時に実行される
public var onStart: (() -> Void)?
/// 映像フレームの描画停止時に実行される
public var onStop: (() -> Void)?
/// 映像が backgroundView に切り替わったときに実行される
public var onClear: (() -> Void)?

/**
VideoRenderer プロトコルのデフォルト実装となる UIView です。
Expand Down Expand Up @@ -173,20 +180,20 @@ public class VideoView: UIView {
self.bringSubviewToFront(self.defaultBackgroundView)
}
}
handlers.onClear?()
}
}

/**
映像フレームの描画を開始します。
*/
public func start() {
print("kensaku: call start")
if !isRendering {
print("kensaku: 描画開始")
DispatchQueue.main.async {
self.bringSubviewToFront(self.contentView)
self.isRendering = true
}
handlers.onStart?()
}
}

Expand All @@ -195,9 +202,8 @@ public class VideoView: UIView {
描画の停止中は ``render(videoFrame:)`` が実行されません。
*/
public func stop() {
print("kensaku: call stop")
isRendering = false
print("kensaku: isRendering is now \(isRendering)")
handlers.onStop?()
}

// MARK: - デバッグモード
Expand Down

0 comments on commit aa02b52

Please sign in to comment.