video: add DamusVideoPlayer view
This commit is contained in:
69
damus/Views/Video/DamusVideoPlayer.swift
Normal file
69
damus/Views/Video/DamusVideoPlayer.swift
Normal file
@@ -0,0 +1,69 @@
|
||||
//
|
||||
// VideoPlayerView.swift
|
||||
// damus
|
||||
//
|
||||
// Created by William Casarin on 2023-04-05.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct DamusVideoPlayer: View {
|
||||
var url: URL
|
||||
@StateObject var model: VideoPlayerModel = VideoPlayerModel()
|
||||
@Binding var video_size: CGSize?
|
||||
|
||||
var mute_icon: String {
|
||||
if model.muted {
|
||||
return "speaker.slash"
|
||||
} else {
|
||||
return "speaker"
|
||||
}
|
||||
}
|
||||
|
||||
var MuteIcon: some View {
|
||||
ZStack {
|
||||
Circle()
|
||||
.opacity(0.2)
|
||||
.frame(width: 32, height: 32)
|
||||
.foregroundColor(.black)
|
||||
|
||||
Image(systemName: mute_icon)
|
||||
.onTapGesture {
|
||||
model.muted = !model.muted
|
||||
}
|
||||
.padding()
|
||||
.foregroundColor(.white)
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ZStack(alignment: .bottomTrailing) {
|
||||
VideoPlayer(url: url, model: model)
|
||||
.onAppear{
|
||||
model.start()
|
||||
}
|
||||
.onDisappear {
|
||||
model.stop()
|
||||
}
|
||||
|
||||
MuteIcon
|
||||
}
|
||||
.onTapGesture {
|
||||
self.model.muted = !self.model.muted
|
||||
}
|
||||
.onChange(of: model.size) { size in
|
||||
guard let size else {
|
||||
return
|
||||
}
|
||||
video_size = size
|
||||
}
|
||||
}
|
||||
}
|
||||
struct DamusVideoPlayer_Previews: PreviewProvider {
|
||||
@StateObject static var model: VideoPlayerModel = VideoPlayerModel()
|
||||
@State static var video_size: CGSize? = nil
|
||||
|
||||
static var previews: some View {
|
||||
DamusVideoPlayer(url: URL(string: "http://cdn.jb55.com/s/zaps-build.mp4")!, model: model, video_size: $video_size)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user