Любой способ получить GIF в качестве фона с swiftUI? - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь сделать gif фоновым слоем представления, но swiftUI, похоже, не позволяет этого. Я просмотрел переполнение стека и обнаружил, что это можно сделать с помощью UIKit, но я все еще новичок в общении и не очень доволен UIKit. Если есть какой-либо способ сделать это с swiftUI, хотелось бы получить какой-нибудь ввод.

Если изображение не возможно, может быть, автоматическое c видео в фоновом режиме?

Спасибо

1 Ответ

0 голосов
/ 11 февраля 2020

Я использовал WKWebView для отображения GIF. Полученный вид можно установить где угодно. Чтобы установить его в качестве фона, вы, вероятно, захотите изменить размер содержимого WKWebView в соответствии с содержимым суперпредставления.

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
        }
    }
}

Я получил свой анимированный GIF от Wikimedia Commons и перетащил его в Assets.xcassets в Xcode.

Результат: Animated gif of Xcode Simulator showing animated gif

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...