有什么方法可以使用 swiftUI 将 gif 作为背景? [英] Any way to get a gif as a background with swiftUI?

查看:70
本文介绍了有什么方法可以使用 swiftUI 将 gif 作为背景?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图让 gif 成为视图的背景层,但 swiftUI 似乎不允许这样做.我查看了堆栈溢出,发现可以通过 UIKit 来实现,但总的来说,我对 swift 还是个新手,对 UIKit 不太满意.如果 swiftUI 有任何方法可以做到这一点,希望能提供一些输入.

如果无法使用 gif,也许可以在后台自动播放视频?

谢谢

解决方案

我使用了 WKWebView 来显示 gif.结果视图可以在任何地方设置.要将其设置为背景,您可能需要根据超级视图的内容调整 WKWebView 内容的大小.

导入 SwiftUI导入 WebKitstruct HTMLRenderingWebView: UIViewRepresentable {@Binding var htmlString: 字符串@Binding var baseURL: URL?func makeUIView(context: Context) ->WKWebView {让 webView = WKWebView()返回网页视图}func updateUIView(_ uiView: WKWebView, context: Context) {如果 self.htmlString != context.coordinator.lastLoadedHTML {打印(更新HTML")context.coordinator.lastLoadedHTML = self.htmlStringuiView.loadHTMLString(self.htmlString, baseURL: self.baseURL)}}func makeCoordinator() ->协调员{协调员(自己)}类协调器:NSObject {var 父级:HTMLRenderingWebViewvar lastLoadedHTML = ""初始化(_ 父级:HTMLRenderingWebView){self.parent = 父母}}}struct HTMLRenderingWebViewExample:视图{@State var htmlString = ""var主体:一些视图{虚拟堆栈{HTMLRenderingWebView(htmlString: self.$htmlString, baseURL: .constant(nil)).padding(30).background(Color.gray)Button("点击这个按钮") {self.htmlString = "<meta name=\"viewport\" content=\"initial-scale=1.0\"/>"+(self.assetAsString() ??图片加载失败")}}.navigationBarTitle("HTML 渲染示例")}func assetAsString() ->细绳?{让资产 = NSDataAsset(名称:User_OhSqueezy_on_commons_wikimedia_org_Parallax_scrolling_example_scene")如果让数据 = 资产?.数据 {让 base64string = data.base64EncodedString()让格式=gif"return "<img src='data:image/\(format);base64," + base64string + "' height=240 width=360>"} 别的 {返回零}}}

我从

I am trying to get a gif to be a background layer of a view but swiftUI doesn't seem to allow that. I've looked through stack overflow and found it is possible to do so through UIKit, but I'm still new to swift in general and not that comfortable with UIKit. If there is any way to do so with swiftUI, would love for some input.

If a gif isn't possible, maybe an automatic video in the background?

Thanks

解决方案

I've used a WKWebView to display a gif. The resulting view can be set anywhere. To set it as a background, you'll probably want to resize the contents of the WKWebView according to the contents of the superview.

import SwiftUI
import WebKit

struct HTMLRenderingWebView: UIViewRepresentable {
    @Binding var htmlString: String
    @Binding var baseURL: URL?

    func makeUIView(context: Context) -> WKWebView {
        let webView = WKWebView()
        return webView
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
        if self.htmlString != context.coordinator.lastLoadedHTML {
            print("Updating HTML")
            context.coordinator.lastLoadedHTML = self.htmlString
            uiView.loadHTMLString(self.htmlString, baseURL: self.baseURL)
        }
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    class Coordinator: NSObject {
        var parent: HTMLRenderingWebView
        var lastLoadedHTML = ""

        init(_ parent: HTMLRenderingWebView) {
            self.parent = parent
        }
    }
}

struct HTMLRenderingWebViewExample: View {
    @State var htmlString = ""

    var body: some View {
        VStack {
            HTMLRenderingWebView(htmlString: self.$htmlString, baseURL: .constant(nil))
                .padding(30).background(Color.gray)
            Button("Click this button") {
                self.htmlString = "<meta name=\"viewport\" content=\"initial-scale=1.0\" />" +
                    (self.assetAsString() ?? "image loading failed")
            }
        }.navigationBarTitle("Example HTML Rendering")
    }

    func assetAsString() -> String? {
        let asset = NSDataAsset(name: "User_OhSqueezy_on_commons_wikimedia_org_Parallax_scrolling_example_scene")
        if let data = asset?.data {
            let base64string = data.base64EncodedString()
            let format = "gif"
            return "<img src='data:image/\(format);base64," + base64string + "' height=240 width=360>"
        } else {
            return nil
        }
    }
}

I got my animated gif from Wikimedia Commons and dragged it into the Assets.xcassets in Xcode.

Result:

这篇关于有什么方法可以使用 swiftUI 将 gif 作为背景?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆