IceCubes/IceCubesApp/App/QuickLookRepresentable.swift

93 lines
2.5 KiB
Swift
Raw Normal View History

2023-01-16 14:40:23 +01:00
import QuickLook
2023-01-17 11:36:01 +01:00
import SwiftUI
import UIKit
2023-01-16 14:40:23 +01:00
extension URL: Identifiable {
public var id: String {
absoluteString
}
}
struct QuickLookPreview: UIViewControllerRepresentable {
let selectedURL: URL
let urls: [URL]
2023-01-17 11:36:01 +01:00
func makeUIViewController(context: Context) -> UIViewController {
return AppQLPreviewController(selectedURL: selectedURL, urls: urls)
2023-01-16 14:40:23 +01:00
}
2023-01-17 11:36:01 +01:00
2023-01-16 14:40:23 +01:00
func updateUIViewController(
_: UIViewController, context _: Context
2023-01-17 11:36:01 +01:00
) {}
}
2023-01-17 11:36:01 +01:00
class AppQLPreviewController: UIViewController {
let selectedURL: URL
let urls: [URL]
var qlController : QLPreviewController?
init(selectedURL: URL, urls: [URL]) {
self.selectedURL = selectedURL
self.urls = urls
super.init(nibName: nil, bundle: nil)
2023-01-16 14:40:23 +01:00
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if self.qlController == nil {
self.qlController = QLPreviewController()
self.qlController?.dataSource = self
self.qlController?.delegate = self
self.qlController?.currentPreviewItemIndex = urls.firstIndex(of: selectedURL) ?? 0
self.present(self.qlController!, animated: true)
2023-01-16 14:40:23 +01:00
}
}
}
2023-01-17 11:36:01 +01:00
extension AppQLPreviewController : QLPreviewControllerDataSource {
func numberOfPreviewItems(in _: QLPreviewController) -> Int {
return self.urls.count
}
2023-01-17 11:36:01 +01:00
func previewController(_: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
return self.urls[index] as QLPreviewItem
2023-01-16 14:40:23 +01:00
}
}
extension AppQLPreviewController : QLPreviewControllerDelegate {
func previewController(_: QLPreviewController, editingModeFor _: QLPreviewItem) -> QLPreviewItemEditingMode {
.createCopy
2023-01-16 14:40:23 +01:00
}
2023-01-17 11:36:01 +01:00
func previewControllerWillDismiss(_ controller: QLPreviewController) {
self.dismiss(animated: true)
2023-01-16 14:40:23 +01:00
}
}
2023-01-17 11:36:01 +01:00
struct TransparentBackground: UIViewControllerRepresentable {
public func makeUIViewController(context: Context) -> UIViewController {
return TransparentController()
}
public func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
class TransparentController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .clear
}
override func willMove(toParent parent: UIViewController?) {
super.willMove(toParent: parent)
parent?.view?.backgroundColor = .clear
parent?.modalPresentationStyle = .overCurrentContext
}
2023-01-16 14:40:23 +01:00
}
}