【发布时间】:2019-11-18 08:07:47
【问题描述】:
我的主要目标是使用 SwiftUI 将 GIF/MP4 文件嵌入到 HStack/VStack 的视图中。我了解代码需要符合“可表示”协议。我的第一次尝试如下:
import SwiftUI
import AVKit
struct GIF : UIViewControllerRepresentable {
let url_name: String
func makeUIViewController(context: UIViewControllerRepresentableContext<GIF>) -> AVPlayerViewController {
return AVPlayerViewController()
}
func updateUIViewController(_ uiViewController: AVPlayerViewController, context: UIViewControllerRepresentableContext<GIF>) {
let url = URL(string: url_name)!
let player = AVPlayer(url: url)
let vc = AVPlayerViewController()
vc.player = player
//PROBLEM
self.present(vc, animated: true){
vc.player?.play()
}
}
}
问题是我认为“自我”在这里没有任何意义,我们需要参考一个视图。我们将如何做到这一点?我们不能只在故事板中创建视图,因为我想将视图控制器与 SwiftUI 集成。
任何帮助将不胜感激。
附:这是我的第一个 iOS 应用,所以如果我在这里遗漏了一些非常明显的东西,请尽量善待!
【问题讨论】:
-
我不使用
AVKit(?) 但看起来你走在正确的轨道上。是的,您需要创建一个UIViewControllerRepresentable。不要忘记,对于SwiftUI,它只是一个View。我已经为UIImagePickerController、UIActivityViewController和MTKView完成了此操作(是的,我需要将其包装到UIViewController中以用于委托方法。您正在做完全我需要做的事情使用活动视图控制器 - 将其包装在执行present的 VC 中。Kludgy?当然。但请记住,我们刚刚进入版本 1 的 beta 3。 -
阅读您的 P.S. 后的最终想法。为什么选择
SwiftUI?当然,这是“冰球的去向”。但不要认为UIKit很快就会被弃用。 (也许在十年内。说真的。)在UIKit应用程序中有大量示例可以满足您的需求。此外,不要忽略所有SwiftUI应用程序都需要在今年秋季推出的操作系统版本。由于这是您的第一个 iOS 应用程序,您可能想退出“前沿”。 -
我同意@dfd。为了不失去对 Swift 开发的兴趣,你可以试试 UIKit,那里有大量的工作示例 :)
-
感谢大家的支持。至于我为什么选择 SwiftUI - 我只是认为它会比 UIKit 更容易使用,但我现在意识到,在 SwiftUI 得到更多开发和更多社区支持之前,也许它值得坚持使用 UIKit。