mirror of
https://github.com/yattee/yattee.git
synced 2024-12-26 23:43:41 +00:00
78 lines
2.7 KiB
Swift
78 lines
2.7 KiB
Swift
|
import Combine
|
||
|
import SwiftUI
|
||
|
|
||
|
struct TVControls: UIViewRepresentable {
|
||
|
var model: PlayerControlsModel!
|
||
|
var player: PlayerModel!
|
||
|
var thumbnails: ThumbnailsModel!
|
||
|
|
||
|
@State private var direction = ""
|
||
|
@State private var controlsArea = UIView()
|
||
|
|
||
|
func makeUIView(context: Context) -> UIView {
|
||
|
let tapGesture = UITapGestureRecognizer(target: context.coordinator, action: #selector(Coordinator.handleTap(sender:)))
|
||
|
|
||
|
let leftSwipe = UISwipeGestureRecognizer(target: context.coordinator, action: #selector(Coordinator.handleSwipe(sender:)))
|
||
|
leftSwipe.direction = .left
|
||
|
|
||
|
let rightSwipe = UISwipeGestureRecognizer(target: context.coordinator, action: #selector(Coordinator.handleSwipe(sender:)))
|
||
|
rightSwipe.direction = .right
|
||
|
|
||
|
let upSwipe = UISwipeGestureRecognizer(target: context.coordinator, action: #selector(Coordinator.handleSwipe(sender:)))
|
||
|
upSwipe.direction = .up
|
||
|
|
||
|
let downSwipe = UISwipeGestureRecognizer(target: context.coordinator, action: #selector(Coordinator.handleSwipe(sender:)))
|
||
|
downSwipe.direction = .down
|
||
|
|
||
|
controlsArea.addGestureRecognizer(tapGesture)
|
||
|
controlsArea.addGestureRecognizer(leftSwipe)
|
||
|
controlsArea.addGestureRecognizer(rightSwipe)
|
||
|
controlsArea.addGestureRecognizer(upSwipe)
|
||
|
controlsArea.addGestureRecognizer(downSwipe)
|
||
|
|
||
|
let controls = UIHostingController(rootView: PlayerControls(player: player, thumbnails: thumbnails))
|
||
|
controls.view.frame = .init(
|
||
|
origin: .zero,
|
||
|
size: .init(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
|
||
|
)
|
||
|
|
||
|
controlsArea.addSubview(controls.view)
|
||
|
|
||
|
return controlsArea
|
||
|
}
|
||
|
|
||
|
func updateUIView(_: UIView, context _: Context) {}
|
||
|
|
||
|
func makeCoordinator() -> TVControls.Coordinator {
|
||
|
Coordinator(controlsArea, model: model)
|
||
|
}
|
||
|
|
||
|
final class Coordinator: NSObject {
|
||
|
private let view: UIView
|
||
|
private let model: PlayerControlsModel
|
||
|
|
||
|
init(_ view: UIView, model: PlayerControlsModel) {
|
||
|
self.view = view
|
||
|
self.model = model
|
||
|
super.init()
|
||
|
}
|
||
|
|
||
|
@available(*, unavailable)
|
||
|
required init?(coder _: NSCoder) {
|
||
|
fatalError("init(coder:) has not been implemented")
|
||
|
}
|
||
|
|
||
|
@objc func handleTap(sender: UITapGestureRecognizer) {
|
||
|
let location = sender.location(in: view)
|
||
|
model.reporter.send("tap \(location)")
|
||
|
print("tap \(location)")
|
||
|
}
|
||
|
|
||
|
@objc func handleSwipe(sender: UISwipeGestureRecognizer) {
|
||
|
let location = sender.location(in: view)
|
||
|
model.reporter.send("swipe \(location)")
|
||
|
print("swipe \(location)")
|
||
|
}
|
||
|
}
|
||
|
}
|