【问题标题】:I can't load animation and I can't remove it after request has been loaded我无法加载动画,并且在加载请求后无法将其删除
【发布时间】:2020-01-02 13:15:54
【问题描述】:

我在我的应用程序的本机部分做一些事情。然后,当我从服务器获取 sessionID 时,我将其设置为 WKWebView。然后,我将我的网页加载到 webview 本身。问题是,我使用名为“didfinish”的函数来播放 gif。该函数有效,每次都会调用它,但是当我尝试停止 gif 时,它对我的​​图像视图显示 nil。

我将我的 imageview 放在覆盖 WKWebview 的视图顶部,该用户不会看到一个空白视图,直到它完全加载。

override func viewDidLoad() {
        super.viewDidLoad()
        ...some code...
        imageViewForAnimation.loadGif(named:"gif")
        loadWeb()
}
func loadWeb(){
        setCookie()
        view=self.webview
        webview?.load(URLRequest(url: URL(string: lastURL)!))
        self.webview.navigationDelegate=self
}
func setCookie(){
        print("session id is:\(session_id)")
        let cookie = HTTPCookie(properties: [
            .domain: "mywebpage.com",
            .path: "/",
            .name: "sessionID",
            .value: "\(session_id)",
            .secure: "TRUE",
            .expires: NSDate(timeIntervalSinceNow: 31556926)
            ])!
        let websitedataStorage=WKWebsiteDataStore.nonPersistent()
        websitedataStorage.httpCookieStore.setCookie(cookie) {
        }
        let configuration=WKWebViewConfiguration()
        configuration.websiteDataStore=websitedataStorage
        webview=WKWebView(frame: self.view.frame, configuration: configuration)
}

没有任何 gif 或没有任何额外的东西,一切都很好。我想要的是,如果页面准备好了

func webView(_ webView: WKWebView,
                 didFinish navigation: WKNavigation!) {
        self.imageViewForAnimation.image=nil   //for stopping animating
        self.coverViewOnTopOfWebView.alpha=0   //show web now

 }

我得到的错误是

线程 1:致命错误:在隐式中意外发现 nil 展开可选值

在 didFinish 函数中。为了播放 gif,我使用了这个类

https://github.com/swiftgif/SwiftGif/blob/master/SwiftGifCommon/UIImage%2BGif.swift

提前感谢大家的帮助和建议。

【问题讨论】:

    标签: ios swift wkwebview gif


    【解决方案1】:

    你在loadWeb()方法的代码中犯了错误。

    view=self.webview
    

    上面的代码会将 nil 设置为放在view 中的所有其他控件。 而不是将self.webView 分配给view,您应该从情节提要中添加它或以编程方式将其添加到视图中,例如:

    self.view.insertSubview(self.webview, at: 0)
    

    或者

    self.view.addSubview(self.webview)
    

    哪一个更适合你。

    【讨论】:

    • 哦,我明白了,但我已经将 WebView 放在情节提要的视图上。如果我不使用view=self.webview这一行,它无法加载网络,只是空的。什么都没有出现。
    • 您可以使用我添加的其他解决方案。
    • 非常感谢兄弟,当我将 WebView 添加为子视图时,它可以正常工作。另外,对于有同样问题的人,我在添加子视图后携带了代表(navigationdelegate,uidelegeta)。 Otherview 这些代理的某些功能无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2011-12-23
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多