UIProgressView加载栏的百分比

时间:2017-01-28 16:50:23

标签: ios swift timer swift3 uiprogressview

我想为我的iOS项目在Swift 3中创建一个加载栏。我正在做一个Web视图,需要执行此加载栏以显示操作之间。我知道这是假加载条,我在Objective-C中看到了代码,并尝试在Swift中创建一些东西,但我担心我的逻辑是错误的,因为我是Swift的新手。

我遇到的问题是,我并不知道我是否将vars theBooltimer设置到正确的位置,而我不知道如何使用Timer()

告诉你我在运行应用程序时看到的内容,进度条显示的是整个时间,但它没有加载。

这是我目前的代码

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var webView: UIWebView!
    @IBOutlet weak var progressView: UIProgressView!

    var theBool = false
    var timer = Timer()

    override func viewDidLoad() {
        super.viewDidLoad()

        progressView.progress = 0.0

        //Reading the webview
        let websiteURL = URL(string: "http://google.com")
        let websiteURLRequest = URLRequest(url: websiteURL!)
        webView.loadRequest(websiteURLRequest)
    }

    func webViewDidFinishLoad (){
        if webView.isLoading == true {
        theBool = true
        }
    }

    func handleProgress () {
        if (theBool){
            if (progressView.progress >= 1) {
                progressView.isHidden = true
                timer.invalidate()
            } else {
                progressView.progress += 0.1
            }
        } else {
            progressView.progress += 0.05
            if (progressView.progress >= 0.95) {
                progressView.progress = 0.95
            }
        }
    }

    /*
    func addValsToProgress () ->String {
        if (webViewLoading() == true) {
            view.progressView.setProgre
        }
    }
    */
}

3 个答案:

答案 0 :(得分:2)

根据您提供的代码,您需要使用时间间隔和操作初始化timer。这样,当调用计时器时,它会调用handleProgress。加载状态开始时,计时器应fire,并定期调用handleProgress,直到加载完成。此时,计时器将为invalidated,并将停止调用handleProgress

有关如何执行此操作,请参阅https://developer.apple.com/reference/foundation/timer

答案 1 :(得分:1)

你不需要假装载栏。你可以使用WKWebView

KVO Observer

您可以将KVO观察者放置到此值:

https://developer.apple.com/reference/webkit/wkwebview/1415007-estimatedprogress

YouTube视频:https://www.youtube.com/watch?v=vd3Imcc7ctw

这里有一个较旧的示例:https://www.hackingwithswift.com/example-code/wkwebview/how-to-monitor-wkwebview-page-load-progress-using-key-value-observing

github搜索的更多示例:https://github.com/search?l=Swift&o=desc&q=estimatedProgress+addObserver&s=indexed&type=Code&utf8=%E2%9C%93

代表

WKNavigationDelegate

https://developer.apple.com/reference/webkit/wknavigationdelegate

此处还有一些委托回调:

  

可选的func webView(_ webView:WKWebView,               didFinish导航:WKNavigation!)

请参阅https://developer.apple.com/reference/webkit/wknavigationdelegate/1455629-webview

PS:还有WKUIDelegate - 但是没有那么有趣的方法

https://developer.apple.com/reference/webkit/wkuidelegate

答案 2 :(得分:1)

因此,经过几次尝试使用您发布的解决方案后,我找到了答案。 这很简单,我感到很惭愧。

它就像一个魅力。谢谢大家的答案:)

@IBOutlet var webView: UIWebView!
@IBOutlet var progressView: UIProgressView!

override func viewDidLoad() {
    super.viewDidLoad()
    let url = NSURL(string: "http://google.com")
    let request = NSURLRequest(url: url as! URL)
    webView.loadRequest(request as URLRequest)
    webView.delegate=self
}

func webViewDidStartLoad(_ webView: UIWebView) {

    self.progressView.setProgress(0.1, animated: false)
}


func webViewDidFinishLoad(_ webView: UIWebView) {

    self.progressView.setProgress(1.0, animated: true)
}

func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {

    self.progressView.setProgress(1.0, animated: true)
}