仅针对特定视图使用NVActivityIndicatorView

5
我正在使用这个库https://github.com/ninjaprox/NVActivityIndicatorView来显示加载指示器。默认情况下,它会阻塞整个视图控制器,但我如何只为特定视图显示活动指示器呢?例如,如果一个视图控制器包含一个Web视图和其他视图,则活动指示器应该仅针对Web视图,并且我应该能够与其他视图交互。
class FaqViewController: UIViewController, UIWebViewDelegate
{

    @IBOutlet var faqWebView: UIWebView!
    static let activityData = ActivityData()
    var activityIndicator : NVActivityIndicatorView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
        faqWebView.delegate = self
        faqWebView.loadRequest(URLRequest(url: URL(string: "https://www.google.com")!))
    }

    func webViewDidStartLoad(_ webView: UIWebView)
    {
        NVActivityIndicatorView.DEFAULT_BLOCKER_SIZE = CGSize(width: 45, height: 45)
        NVActivityIndicatorPresenter.sharedInstance.startAnimating(FaqViewController.activityData)
    }

    func webViewDidFinishLoad(_ webView: UIWebView)
    {
        NVActivityIndicatorPresenter.sharedInstance.stopAnimating()
    }
}

你的 UIWebView 框架是什么? - Anbu.Karthik
目前它填充整个视图。但我想随时与导航控制器交互,即使页面正在加载也可以返回。 - Prabu Raj
使用以下代码更改 NVActivityIndicatorView 的框架:let x = self.view.center.x let y = self.view.center.y let frame = CGRect(x: (x - 50), y: (y - 50), width: 100, height: 100) NVActivityIndicatorView(frame: frame) - Anbu.Karthik
我尝试过这个,但现在加载指示器本身没有显示。 - Prabu Raj
检查更新后的答案。 - Anbu.Karthik
2个回答

4
例如,显示activityIndicator
func webViewDidStartLoad(_ webView: UIWebView)
{
    //NVActivityIndicatorView.DEFAULT_BLOCKER_SIZE = CGSize(width: 45, height: 45)
    //NVActivityIndicatorPresenter.sharedInstance.startAnimating(FaqViewController.activityData)

    let xAxis = self.view.center.x // or use (view.frame.size.width / 2) // or use (faqWebView.frame.size.width / 2)
    let yAxis = self.view.center.y // or use (view.frame.size.height / 2) // or use (faqWebView.frame.size.height / 2)



let frame = CGRect(x: (xAxis - 50), y: (yAxis - 50), width: 45, height: 45)
 activityIndicator = NVActivityIndicatorView(frame: frame)
activityIndicator.type = . ballScale // add your type
activityIndicator.color = UIColor.red // add your color

self.view.addSubview(activityIndicator) // or use  webView.addSubview(activityIndicator)
activityIndicator.startAnimating()
}

隐藏时使用

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

   func webViewDidFinishLoad(webView: UIWebView!)
    {
      hideactivityIndicator()
    }

  func hideactivityIndicator()
  {

  activityIndicator. stopAnimating()
  activityIndicator.removeFromSuperview()
  }

imageview means - Anbu.Karthik
你的编码是同步还是异步,如果是同步的话不要显示加载指示器。 - Anbu.Karthik
我正在使用Alamofire进行异步网络调用。 - Prabu Raj
使用Alamofire imageloader概念来实现加载指示器。 - Anbu.Karthik
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/154647/discussion-between-prabu-raj-and-anbu-karthik。 - Prabu Raj
显示剩余4条评论

0

你需要将它作为子视图添加到你想要显示的任何视图上。在你的情况下,你只想在UIWebView上显示,那么你的代码应该像这样:

self.faqWebView.addSubView(activityIndicator)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接