【问题标题】:NVActivityIndicatorView only for particular viewNVActivityIndi​​catorView 仅用于特定视图
【发布时间】:2017-09-15 07:37:31
【问题描述】:

我正在使用这个库https://github.com/ninjaprox/NVActivityIndicatorView 来显示加载指示器。默认情况下,它会阻止整个视图控制器,但我如何才能仅显示特定视图的活动指示器。例如,如果一个视图控制器包含一个 webview 和一些其他视图,则活动指示器应该仅用于 webview,并且我应该能够与其他视图交互。

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 框架是什么
  • 现在它填满了整个视图。但是我想在任何时候与导航控制器交互,即使页面正在加载,也可以返回。
  • 使用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)更改NVActivityIndicatorView的框架
  • 我试过了,但现在加载指示器本身没有显示。
  • 检查更新的答案

标签: ios swift swift3 uiwebview uiactivityindicatorview


【解决方案1】:

例如显示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 尝试了同样的方法,但它不起作用?我可以知道会是什么问题。 imageview 是视图的子视图。
  • imageview 表示
  • imageview 表示 UIImageView 包含 UIImage
  • 哈哈哈兄弟,imageview包含UIimage属性,你尝试了什么,你的概念是什么
  • 我必须从服务器加载图像。在它加载之前,我必须仅在该特定视图中显示加载指示器。
【解决方案2】:

您必须将它添加为您想要显示它的任何视图的子视图。如果您只想在 UIWebView 上显示,那么您的代码应该看起来像

self.faqWebView.addSubView(activityIndicator)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多