如何从swift5的WKWebviews中预加载WKWebviews

问题描述 投票:1回答:1

我有两个独立的WKWebViewController。按下按钮时,我先加载WKWebView,然后加载另一个WKWebView

所以我想提前加载另一个WKWebView。我该怎么办?

两个ViewController中的每个都有WKWebView。

mainstory

第一个WKWebView

    func openSecondScreen(){
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let openSecondScreen = storyboard.instantiateViewController(withIdentifier: "SecondWebViewController") as! SecondWebViewController
        openSecondScreen.modalPresentationStyle = .overCurrentContext
        openSecondScreen.modalTransitionStyle = .crossDissolve
        openSecondScreen.delegate = self
        self.navigationController?.pushViewController(openSecondScreen, animated: true)
    }

第二个WKWebView

    @IBOutlet var secondWKWebView: WKWebView!
    override func loadView() {
        super.loadView()

        let images = global.getIndicatorImage()
        let animatedImage = UIImage.animatedImage(with: images, duration: 1.0)
        self.indicatorImage.image = animatedImage


        contentController.add(self, name: "SecondWeb")

        config.userContentController = contentController

        secondWKWebView = WKWebView(frame: secondWKWebView.frame, configuration: config)

        secondWKWebView.uiDelegate = self
        secondWKWebView.navigationDelegate = self

        view.addSubview(secondWKWebView)
        view.addSubview(indicator)

        if contentController.userScripts.count > 0 {
            contentController.removeAllUserScripts()
        }
        let  localFilePath = Bundle.main.url(forResource: webUrl, withExtension: "html")
        let  myRequest = URLRequest(url: localFilePath)
        secondWKWebView.load(myRequest)
    }

我该如何解决这个问题?

ios swift wkwebview preload
1个回答
0
投票
第一个WKWebView

var openSecondScreen : SecondWebViewController! var preloadCheck = false ... func openSecondScreen(){ let storyboard = UIStoryboard(name: "Main", bundle: nil) openSecondScreen = storyboard.instantiateViewController(withIdentifier: "SecondWebViewController") as! SecondWebViewController openSecondScreen.delegate = self openSecondScreen.loadViewIfNeeded() openSecondScreen.secondWKWebView.uiDelegate = self openSecondScreen.secondWKWebView.navigationDelegate = self preloadCheck = true } .... func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { if preloadCheck { self.navigationController?.pushViewController(openSecondScreen, animated: true) preloadCheck = false } }

第二个WKWebView

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        indicatorImage.isHidden = true
        indicatorImage.stopAnimating()
    }

所以我通过在显示屏幕时隐藏指示器图像来解决此问题。

第二个WKWebView

override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) indicatorImage.isHidden = true indicatorImage.stopAnimating() }

[当您按下按钮打开第二个Webview屏幕时,指示器图像显示在第一个Webview屏幕上,导航完成后指示器图像消失,并且第二个Webview屏幕显示为预加载。

© www.soinside.com 2019 - 2024. All rights reserved.