我想为我的iOS项目在Swift 3中创建一个加载栏。我正在做一个Web视图,需要执行此加载栏以显示操作之间。我知道这是假加载条,我在Objective-C中看到了代码,并尝试在Swift中创建一些东西,但我担心我的逻辑是错误的,因为我是Swift的新手。
我遇到的问题是,我并不知道我是否将vars theBool
和timer
设置到正确的位置,而我不知道如何使用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
}
}
*/
}
答案 0 :(得分:2)
根据您提供的代码,您需要使用时间间隔和操作初始化timer
。这样,当调用计时器时,它会调用handleProgress
。加载状态开始时,计时器应fire
,并定期调用handleProgress
,直到加载完成。此时,计时器将为invalidated
,并将停止调用handleProgress
。
有关如何执行此操作,请参阅https://developer.apple.com/reference/foundation/timer。
答案 1 :(得分:1)
你不需要假装载栏。你可以使用WKWebView
您可以将KVO观察者放置到此值:
https://developer.apple.com/reference/webkit/wkwebview/1415007-estimatedprogress
YouTube视频:https://www.youtube.com/watch?v=vd3Imcc7ctw
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 - 但是没有那么有趣的方法
答案 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)
}