work on tvos subtitle overlay
This commit is contained in:
parent
a9d37033e6
commit
40b6e5c680
|
@ -46,7 +46,7 @@ class VLCPlayerViewController: UIViewController {
|
|||
private lazy var jumpBackwardOverlayView = makeJumpBackwardOverlayView()
|
||||
private lazy var jumpForwardOverlayView = makeJumpForwardOverlayView()
|
||||
private var currentOverlayHostingController: UIHostingController<tvOSVLCOverlay>?
|
||||
private var currentOverlayContentHostingController: UIHostingController<tvOSOverlayContentView>?
|
||||
private var currentOverlayContentHostingController: UIHostingController<SmallMediaStreamSelectionView>?
|
||||
|
||||
// MARK: init
|
||||
|
||||
|
@ -195,12 +195,21 @@ class VLCPlayerViewController: UIViewController {
|
|||
case .select:
|
||||
didGenerallyTap()
|
||||
case .upArrow:
|
||||
if displayingContentOverlay {
|
||||
hideOverlayContent()
|
||||
|
||||
showOverlay()
|
||||
restartOverlayDismissTimer()
|
||||
}
|
||||
|
||||
print("Up arrow")
|
||||
case .downArrow:
|
||||
stopOverlayDismissTimer()
|
||||
if !displayingContentOverlay {
|
||||
stopOverlayDismissTimer()
|
||||
|
||||
hideOverlay()
|
||||
showOverlayContent()
|
||||
hideOverlay()
|
||||
showOverlayContent()
|
||||
}
|
||||
case .leftArrow:
|
||||
didSelectBackward()
|
||||
print("Left arrow")
|
||||
|
@ -292,13 +301,14 @@ class VLCPlayerViewController: UIViewController {
|
|||
currentOverlayContentHostingController.removeFromParent()
|
||||
}
|
||||
|
||||
// let newSmallMenuOverlayView = SmallMediaStreamSelectionView(items: viewModel.subtitleStreams,
|
||||
// selectedItem: viewModel.subtitleStreams.first(where: { $0.index == viewModel.selectedSubtitleStreamIndex })) { selectedMediaStream in
|
||||
// self.didSelectSubtitleStream(index: selectedMediaStream.index ?? -1)
|
||||
// }
|
||||
// let newOverlayContentHostingController = UIHostingController(rootView: newSmallMenuOverlayView)
|
||||
let newOverlayContentView = tvOSOverlayContentView(viewModel: viewModel)
|
||||
let newOverlayContentHostingController = UIHostingController(rootView: newOverlayContentView)
|
||||
let newSmallMenuOverlayView = SmallMediaStreamSelectionView(viewModel: viewModel,
|
||||
title: "Subtitles",
|
||||
items: viewModel.subtitleStreams) { selectedMediaStream in
|
||||
self.didSelectSubtitleStream(index: selectedMediaStream.index ?? -1)
|
||||
}
|
||||
let newOverlayContentHostingController = UIHostingController(rootView: newSmallMenuOverlayView)
|
||||
// let newOverlayContentView = tvOSOverlayContentView(viewModel: viewModel)
|
||||
// let newOverlayContentHostingController = UIHostingController(rootView: newOverlayContentView)
|
||||
|
||||
newOverlayContentHostingController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
newOverlayContentHostingController.view.backgroundColor = UIColor.clear
|
||||
|
|
|
@ -12,20 +12,14 @@ import SwiftUI
|
|||
|
||||
struct SmallMediaStreamSelectionView: View {
|
||||
|
||||
@Binding var selectedItem: MediaStream?
|
||||
private let title: String
|
||||
private var items: [MediaStream]
|
||||
private var selectedAction: (MediaStream) -> Void
|
||||
|
||||
// init(items: [MediaStream], selectedItem: MediaStream?, selectedAction: @escaping (MediaStream) -> Void) {
|
||||
// self.items = items
|
||||
// self.selectedItem = selectedItem
|
||||
// self.selectedAction = selectedAction
|
||||
// }
|
||||
@ObservedObject var viewModel: VideoPlayerViewModel
|
||||
let title: String
|
||||
var items: [MediaStream]
|
||||
var selectedAction: (MediaStream) -> Void
|
||||
|
||||
var body: some View {
|
||||
ZStack(alignment: .bottom) {
|
||||
LinearGradient(gradient: Gradient(colors: [.clear, .black.opacity(0.7)]),
|
||||
LinearGradient(gradient: Gradient(colors: [.clear, .black.opacity(0.9)]),
|
||||
startPoint: .top,
|
||||
endPoint: .bottom)
|
||||
.ignoresSafeArea()
|
||||
|
@ -36,8 +30,8 @@ struct SmallMediaStreamSelectionView: View {
|
|||
Spacer()
|
||||
|
||||
HStack {
|
||||
Text(title)
|
||||
.font(.title3)
|
||||
Text("Subtitles")
|
||||
|
||||
Spacer()
|
||||
}
|
||||
|
||||
|
@ -45,9 +39,9 @@ struct SmallMediaStreamSelectionView: View {
|
|||
HStack {
|
||||
ForEach(items, id: \.self) { item in
|
||||
Button {
|
||||
self.selectedAction(item)
|
||||
viewModel.playerOverlayDelegate?.didSelectSubtitleStream(index: item.index ?? -1)
|
||||
} label: {
|
||||
if item == selectedItem {
|
||||
if item.index ?? -1 == viewModel.selectedSubtitleStreamIndex {
|
||||
Label(item.displayTitle ?? "No Title", systemImage: "checkmark")
|
||||
} else {
|
||||
Text(item.displayTitle ?? "No Title")
|
||||
|
|
|
@ -27,24 +27,32 @@ struct tvOSOverlayContentView: View {
|
|||
} label: {
|
||||
Text("About")
|
||||
}
|
||||
.buttonStyle(PlainButtonStyle())
|
||||
.background(Color.clear)
|
||||
|
||||
Button {
|
||||
print("here")
|
||||
} label: {
|
||||
Text("Chapters")
|
||||
}
|
||||
.buttonStyle(PlainButtonStyle())
|
||||
.background(Color.clear)
|
||||
|
||||
Button {
|
||||
print("here")
|
||||
} label: {
|
||||
Text("Subtitles")
|
||||
}
|
||||
.buttonStyle(PlainButtonStyle())
|
||||
.background(Color.clear)
|
||||
|
||||
Button {
|
||||
print("here")
|
||||
} label: {
|
||||
Text("Audio")
|
||||
}
|
||||
.buttonStyle(PlainButtonStyle())
|
||||
.background(Color.clear)
|
||||
}
|
||||
.frame(height: 50)
|
||||
|
||||
|
|
|
@ -74,14 +74,16 @@ struct tvOSVLCOverlay: View {
|
|||
}
|
||||
|
||||
if viewModel.shouldShowAutoPlay {
|
||||
Button {
|
||||
viewModel.autoplayEnabled.toggle()
|
||||
} label: {
|
||||
if viewModel.autoplayEnabled {
|
||||
Image(systemName: "play.circle.fill")
|
||||
} else {
|
||||
Image(systemName: "stop.circle")
|
||||
if viewModel.autoplayEnabled {
|
||||
SFSymbolButton(systemName: "play.circle.fill") {
|
||||
viewModel.autoplayEnabled.toggle()
|
||||
}
|
||||
.frame(maxWidth: 30, maxHeight: 30)
|
||||
} else {
|
||||
SFSymbolButton(systemName: "stop.circle") {
|
||||
viewModel.autoplayEnabled.toggle()
|
||||
}
|
||||
.frame(maxWidth: 30, maxHeight: 30)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue