【问题标题】:How to display activity indicator in middle of the iphone screen?如何在 iPhone 屏幕中间显示活动指示器?
【发布时间】:2011-12-26 19:06:01
【问题描述】:

当我们绘制图像时,我们想要显示活动指示器。 谁能帮助我们?

【问题讨论】:

标签: iphone ios ipad


【解决方案1】:
UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc]     
        initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

    activityView.center=self.view.center;
    [activityView startAnimating];
    [self.view addSubview:activityView];

【讨论】:

  • 我还会添加 activityView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin; 以获得正确的横向外观和旋转
  • @adsurbum 谢谢!这是让它集中在从 SE 到 8 Plus 的所有尺寸的 iPhone 屏幕上的关键!在 Swift 中,它是:activityView.autoresizingMask = [ .flexibleLeftMargin, .flexibleTopMargin, .flexibleRightMargin, .flexibleBottomMargin, .flexibleWidth, .flexibleHeight ]
  • +1 到 adsurbum 的评论。设置中心最近在我的应用程序中停止工作。设置 autoresizingMask 修复了它。在此之前,无论我将 .center 设置为什么,它都会始终出现在左上角。
【解决方案2】:

如果您使用的是 Swift,那么您就是这样做的

let activityView = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge)
activityView.center = self.view.center
activityView.startAnimating()

self.view.addSubview(activityView)

【讨论】:

    【解决方案3】:

    为 Swift 3 更新了代码

    Swift 代码

    import UIKit
    class ViewController: UIViewController {
    
        let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
    
        @IBOutlet weak var myBlueSubview: UIView!
    
        @IBAction func showButtonTapped(sender: UIButton) {
            activityIndicator.startAnimating()
        }
    
        @IBAction func hideButtonTapped(sender: UIButton) {
            activityIndicator.stopAnimating()
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // set up activity indicator
            activityIndicator.center = CGPoint(x: myBlueSubview.bounds.size.width/2, y: myBlueSubview.bounds.size.height/2)
            activityIndicator.color = UIColor.yellow
            myBlueSubview.addSubview(activityIndicator)
        }
    }
    

    备注

    • 您可以将活动指示器作为子视图添加到根view 而不是myBlueSubview,从而使活动指示器居中。

      activityIndicator.center =  CGPoint(x: self.view.bounds.size.width/2, y: self.view.bounds.size.height/2)
      self.view.addSubview(activityIndicator)
      
    • 您还可以在 Interface Builder 中创建 UIActivityIndicatorView。只需将 Activity Indicator View 拖到情节提要上并设置属性。请务必选中停止时隐藏。使用插座致电startAnimating()stopAnimating()。见this tutorial

    • 记住LargeWhite 样式的默认颜色是白色。因此,如果您的背景为白色,则看不到它,只需将颜色更改为黑色或您想要的任何其他颜色即可。

      activityIndicator.color = UIColor.black
      
    • 一个常见的用例是后台任务运行时。这是一个例子:

      // start animating before the background task starts
      activityIndicator.startAnimating()
      
      // background task
      DispatchQueue.global(qos: .userInitiated).async {
      
          doSomethingThatTakesALongTime()
      
          // return to the main thread
          DispatchQueue.main.async {
      
              // stop animating now that background task is finished
              self.activityIndicator.stopAnimating()
          }
      }
      

    【讨论】:

      【解决方案4】:

      这是正确的方法:

      UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
      activityIndicator.center = CGPointMake(self.view.frame.size.width / 2.0, self.view.frame.size.height / 2.0);
      [self.view addSubview: activityIndicator];
      
      [activityIndicator startAnimating];
      
      [activityIndicator release];
      

      如果您支持旋转,请设置自动调整大小的蒙版。干杯!!!

      【讨论】:

        【解决方案5】:

        Swift 4,自动布局版本

        func showActivityIndicator(on parentView: UIView) {
            let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
            activityIndicator.startAnimating()
            activityIndicator.translatesAutoresizingMaskIntoConstraints = false
        
            parentView.addSubview(activityIndicator)
        
            NSLayoutConstraint.activate([
                activityIndicator.centerXAnchor.constraint(equalTo: parentView.centerXAnchor),
                activityIndicator.centerYAnchor.constraint(equalTo: parentView.centerYAnchor),
            ])
        }
        

        【讨论】:

        • 欢迎来到 S/O,你的答案不应该是 100% 的代码。总是添加一些解释。
        • 不确定这是否是黑白规则。如果问题的范围足够简单并且代码不言自明,我认为只有代码的答案是完全可以的。 @Orkhan 的回答很到位。
        【解决方案6】:

        试试这个方法

        UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
            activityIndicator.frame = CGRectMake(10.0, 0.0, 40.0, 40.0);
            activityIndicator.center = super_view.center;
            [super_view addSubview: activityIndicator];
        
        [activityIndicator startAnimating];
        

        【讨论】:

          【解决方案7】:

          如果您想在活动指示器中添加文本,请查看http://nullpointr.wordpress.com/2012/02/27/ios-dev-custom-activityindicatorview/

          【讨论】:

          • 感谢您的共享链接,但您应该让我们了解这些步骤,以便每个人都能以干净的方式获取它。
          【解决方案8】:

          你可以这样设置位置

                  UIActivityIndicatorView *activityView = 
          [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
          activityView.frame = CGRectMake(120, 230, 50, 50);
          [self.view addSubview:activityView];
          

          相应地改变帧大小.....

          【讨论】:

            【解决方案9】:

            如果您想使用 AutoLayout 使微调器居中,请执行以下操作:

            UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
            [activityView startAnimating];
            [self.view addSubview:activityView];
            [self.view addConstraint:[NSLayoutConstraint constraintWithItem:activityView
                                                                  attribute:NSLayoutAttributeCenterX
                                                                  relatedBy:NSLayoutRelationEqual
                                                                     toItem:self.view
                                                                  attribute:NSLayoutAttributeCenterX
                                                                 multiplier:1.0
                                                                   constant:0.0]];
            [self.view addConstraint:[NSLayoutConstraint constraintWithItem:activityView
                                                                  attribute:NSLayoutAttributeCenterY
                                                                  relatedBy:NSLayoutRelationEqual
                                                                     toItem:self.view
                                                                  attribute:NSLayoutAttributeCenterY
                                                                 multiplier:1.0
                                                                   constant:0.0]];
            

            【讨论】:

              【解决方案10】:

              Swift 3,xcode 8.1

              您可以使用小扩展将 UIActivityIndi​​catorView 置于 UIView 的中心 并继承 UIView 类:

              代码

              extension UIActivityIndicatorView {
              
                  convenience init(activityIndicatorStyle: UIActivityIndicatorViewStyle, color: UIColor, placeInTheCenterOf parentView: UIView) {
                      self.init(activityIndicatorStyle: activityIndicatorStyle)
                      center = parentView.center
                      self.color = color
                      parentView.addSubview(self)
                  }
              }
              

              如何使用

              let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge, color: .gray,  placeInTheCenterOf: view)
              activityIndicator.startAnimating()
              

              完整示例

              在本例中 UIActivityIndi​​catorView 放置在 ViewControllers 视图的中心:

              import UIKit
              
              class ViewController: UIViewController {
              
                  override func viewDidLoad() {
                      super.viewDidLoad()
                      // Do any additional setup after loading the view, typically from a nib.
                      let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge, color: .gray,  placeInTheCenterOf: view)
                      activityIndicator.startAnimating()
                  }
              }
              
              extension UIActivityIndicatorView {
              
                  convenience init(activityIndicatorStyle: UIActivityIndicatorViewStyle, color: UIColor, placeInTheCenterOf parentView: UIView) {
                      self.init(activityIndicatorStyle: activityIndicatorStyle)
                      center = parentView.center
                      self.color = color
                      parentView.addSubview(self)
                  }
              }
              

              【讨论】:

                【解决方案11】:

                对于 Swift 3,您可以使用以下内容:

                 func setupSpinner(){
                    spinner = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 40, height:40))
                    spinner.color = UIColor(Colors.Accent)
                    self.spinner.center = CGPoint(x:UIScreen.main.bounds.size.width / 2, y:UIScreen.main.bounds.size.height / 2)
                    self.view.addSubview(spinner)
                    spinner.hidesWhenStopped = true
                }
                

                【讨论】:

                  【解决方案12】:

                  希望这会奏效:

                  // create activity indicator 
                  UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] 
                      initWithFrame:CGRectMake(0.0f, 0.0f, 20.0f, 20.0f)];
                  [activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];
                  
                  ...
                   [self.view addSubview:activityIndicator];
                  // release it
                  [activityIndicator release];
                  

                  【讨论】:

                    【解决方案13】:

                    如果你想尝试通过界面来做,你可以view my video for this。 这样,您无需编写任何代码来在 iPhone 屏幕中间显示活动指示器。

                    【讨论】:

                      【解决方案14】:
                      import UIKit
                      
                      class ViewController: UIViewController {
                      
                          @IBOutlet weak var textLbl: UILabel!
                      
                          var containerView = UIView()
                          var loadingView = UIView()
                          var activityIndicator = UIActivityIndicatorView()
                      
                          override func viewDidLoad() {
                              super.viewDidLoad()
                      
                              let _  = Timer.scheduledTimer(withTimeInterval: 10, repeats: false) { (_) in
                                  self.textLbl.text = "Stop ActivitiIndicator"
                                  self.activityIndicator.stopAnimating()
                                  self.containerView.removeFromSuperview()
                              }
                          }
                      
                          override func didReceiveMemoryWarning() {
                              super.didReceiveMemoryWarning()
                          }
                      
                          @IBAction func palyClicked(sender: AnyObject){
                      
                              containerView.frame = self.view.frame
                              containerView.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.3)
                              self.view.addSubview(containerView)
                      
                              loadingView.frame = CGRect(x: 0, y: 0, width: 80, height: 80)
                              loadingView.center = self.view.center
                              loadingView.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.5)
                              loadingView.clipsToBounds = true
                              loadingView.layer.cornerRadius = 10
                              containerView.addSubview(loadingView)
                      
                              activityIndicator.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
                              activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.whiteLarge
                              activityIndicator.center = CGPoint(x:loadingView.frame.size.width / 2, y:loadingView.frame.size.height / 2);
                              activityIndicator.startAnimating()
                              loadingView.addSubview(activityIndicator)
                      
                          }
                      }
                      

                      【讨论】:

                      • 谢谢通猜!你能添加一些额外的文字来解释你的代码吗?
                      【解决方案15】:

                      我找到了一种以最少代码显示活动指示器的方法:

                      首先导入你的 UI Kit

                      import UIKit;
                      

                      然后你必须启动活动指示器

                      let activityIndicator:UIActivityIndicatorView = UIActivityIndicatorView();
                      

                      然后只需复制粘贴下面这些自我解释的功能,并在需要时调用它们:

                      func startLoading(){
                          activityIndicator.center = self.view.center;
                          activityIndicator.hidesWhenStopped = true;
                          activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray;
                          view.addSubview(activityIndicator);
                      
                          activityIndicator.startAnimating();
                          UIApplication.shared.beginIgnoringInteractionEvents();
                      
                      }
                      
                      func stopLoading(){ 
                      
                          activityIndicator.stopAnimating();
                          UIApplication.shared.endIgnoringInteractionEvents();
                      
                      }
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多