0
我正在开发一个基于webView的屏幕,并且我想要在Web内容加载时有一个活动指示器来旋转。iOS Swift - webview中出现多个活动指示器(纺纱器)
由于我必须在应用程序的另一个屏幕中使用相同的活动指示器,因此我已将静态函数中的代码放在特定文件中。
活动指示器似乎对一些网页(简单)网页正常工作,但当我加载更复杂的页面时,我遇到了一个问题。 活动指标重复数次。(参见下图)
在屏幕截图,第一活动的指标具有正确的布局,但下面的一个是较暗这意味着其他几个活动指标已经覆盖在彼此的顶部。 然后他们永远不会消失。
当谈到代码:
我有一个web视图和两个委托方法控制活动指标。
func webViewDidStartLoad(_ webView: UIWebView) {
DispatchQueue.main.async {
EBUtil.startActivityIndicator(self)
}
}
func webViewDidFinishLoad(_ webView: UIWebView) {
DispatchQueue.main.async {
EBUtil.stopActivityIndicator(self)
}
}
我想这是来自webViewDidStartLoad被多次调用的事实。任何想法如何我可以防止这种行为发生?
在此先感谢。
爱德华
编辑:
这里是我的VC完整的代码。
class NewsDetailsViewController: UIViewController, UIWebViewDelegate {
//MARK: - @IBOUTLETS
@IBOutlet weak var webView: UIWebView!
//MARK: - VARIABLES
var url: String!
//MARK: - APP LIFE CYCLE
override func viewDidLoad() {
super.viewDidLoad()
if url != nil {
let urlToLoad = NSURL(string: url)
webView.loadRequest(NSURLRequest(url: urlToLoad as! URL) as URLRequest)
}
}
func webViewDidStartLoad(_ webView: UIWebView) {
DispatchQueue.main.async {
EBUtil.startActivityIndicator(self)
}
}
func webViewDidFinishLoad(_ webView: UIWebView) {
DispatchQueue.main.async {
EBUtil.stopActivityIndicator(self)
}
}
}对活动的指标
和代码启动和停止:
static func startActivityIndicator(_ sender: UIViewController) {
print("START ANIMATING")
if let view = sender.view {
activityIndicatorBackground = UIView(frame: CGRect(x: view.center.x - 25, y: view.center.y - 25, width: 50, height: 50))
activityIndicatorBackground.backgroundColor = UIColor.black
activityIndicatorBackground.layer.zPosition = CGFloat(MAXFLOAT-1)
activityIndicatorBackground.alpha = 0.6
activityIndicatorBackground.layer.cornerRadius = 5
view.addSubview(activityIndicatorBackground)
activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
activityIndicator.center = view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.white
activityIndicator.layer.zPosition = CGFloat(MAXFLOAT)
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
UIApplication.shared.beginIgnoringInteractionEvents()
}
}
static func stopActivityIndicator(_ sender: UIViewController) {
print("STOP ANIMATING")
activityIndicatorBackground.removeFromSuperview()
activityIndicator.stopAnimating()
UIApplication.shared.endIgnoringInteractionEvents()
}
同意这种看法控制器的完整代码.. –
你会分享你怎么网页视图添加到您的屏幕,将工作(即根视图)? – tropicalfish
您正在创建新的指标,每次你打电话给我的代码,尝试删除当前的一个,如果它再次用Bool调用,或者只是使用它的单例类的同一个实例,而不是类功能 – Tj3n