【问题标题】:How to set grey color background for UIActivityIndicator when loading on UIView in iOS在 iOS 中的 UIView 上加载时如何为 UIActivityIndi​​cator 设置灰色背景
【发布时间】:2011-11-03 21:36:33
【问题描述】:

我目前有一个UIActivityIndicator 在屏幕上出现一两秒。我想将背景设置为灰色,因为它出现在屏幕上,但我不知道该怎么做...

到目前为止,我是这样初始化指标的。

- (void)viewDidLoad
{
//...

    activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
    [activity setCenter:CGPointMake(160.0f, 208.0f)];
    [activity setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];

    [self.tableView addSubview:activity];

    [activity startAnimating];

    [activity performSelector:@selector(stopAnimating) withObject:nil afterDelay:1.0];


}

任何帮助将不胜感激。

【问题讨论】:

  • 请澄清您所说的“背景变灰”是什么意思。您是否在整个屏幕上放置“阴影”?否则以某种方式变暗?或者更改要禁用的表视图行?还是别的什么?
  • 遮住整个视图或只是表格视图而不是导航控制器。我猜它是某种黑色的 bakgroundframe,其不透明度设置为 0.5 或其他东西......我只是不知道,因为我以前从未见过它。

标签: iphone ios uiactivityindicatorview viewdidload


【解决方案1】:

不需要单独的视图。这是一个简单的机制:

    UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

    self.activityIndicatorView = activity;
    // make the area larger
    [activity setFrame:self.view.frame;
    // set a background color
    [activity.layer setBackgroundColor:[[UIColor colorWithWhite: 0.0 alpha:0.30] CGColor]];
    CGPoint center = self.view.center;
    activity.center = center;
    [activity release];

【讨论】:

  • 嗯,这看起来不错,但我在 [activity.layer ...] 行上遇到了错误。它说“实例方法的接收器类型'CALayer'是前向声明。”我将“activityIndi​​catorView”设置为我的 VC 的一个属性,我还需要做些什么来完成这项工作吗?编辑:另外,我使用的是 ARC,所以我也没有最后一行。
  • 你包含 QuartzCore.h 了吗?
【解决方案2】:

您应该查看SVProgressHUD

它具有遮盖背景的选项,并且使用起来非常简单。

SVProgressHUDMaskType 有选项

enum {
 SVProgressHUDMaskTypeNone = 1, // allow user interactions, don't dim background UI (default)
SVProgressHUDMaskTypeClear, // disable user interactions, don't dim background UI
SVProgressHUDMaskTypeBlack, // disable user interactions, dim background UI with 50% translucent black
SVProgressHUDMaskTypeGradient // disable user interactions, dim background UI with translucent radial gradient (a-la-alertView)
};`

【讨论】:

  • 是的,我已经看过几次了..但想学习如何自己设置它..但我认为这可能是我应该在我的项目中使用的东西..
  • 只需查看该项目的源代码即可。最简单的方法是制作一个“覆盖”视图,即窗口大小,带有半透明黑色背景。然后将活动指示器添加为该覆盖视图的子视图。
  • 可以用定时器设置这些吗?
  • 好的,很酷,谢谢你。我想我现在可以试试了。因为它确实有一些不错的功能。
  • [self performSelector:@selector(showSpinner) withObject:nil afterDelay:5]; [self performSelector:@selector(dismissTheSpinner) withObject:nil afterDelay:10];
【解决方案3】:

试试这个简单的方法

它对我来说很好用....

- (void)viewDidLoad
{
    UIActivityIndicatorView *activityIndicator= [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
    activityIndicator.layer.cornerRadius = 05;
    activityIndicator.opaque = NO;
    activityIndicator.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.6f];
    activityIndicator.center = self.view.center;
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
    [activityIndicator setColor:[UIColor colorWithRed:0.6 green:0.8 blue:1.0 alpha:1.0]];
    [self.view addSubview: activityIndicator];
}

【讨论】:

    【解决方案4】:

    其实我觉得你可以做的更简单:)

    [_activityIndicator setBounds:self.view.frame];
    [_activityIndicator setCenter:self.view.center];
    [_activityIndicator setAlpha:0.5f];
    [_activityIndicator startAnimating];
    

    您可以在情节提要中设置背景颜色或使用编程方式进行设置

        UIColor *activityBackgroundColor = [UIColor colorWithRed:0.6 green:0.8 blue:1.0 alpha:1.0];
    [_activityIndicator setColor:activityBackgroundColor];
    

    确保在 Xcode 的属性检查器中选中“停止时隐藏”并选中活动指示器。

    【讨论】:

      【解决方案5】:

      您可以在窗口中放置一个背景色为黑色且不透明度为 0.5 的视图。将其放入窗口中也会阻塞导航控制器和标签栏控制器。

      【讨论】:

      • hrmm.. 我正在四处寻找一个很好的方法来做这件事的例子.. 但它们很薄,可以看到......
      • Micah 所说的,我也是。我将代码放在 AppDelegate 中。每当我需要阻止 UI 时,我都会获得对 AppDelegate 的引用并调用该方法来添加“地毯视图”,我喜欢这样称呼它:)
      【解决方案6】:

      更简单的是,您可以将图层背景颜色设置为半透明黑色(或任何其他颜色):

      self.activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
      self.activityIndicatorView.layer.backgroundColor = [[UIColor colorWithWhite:0.0f alpha:0.5f] CGColor];
      self.activityIndicatorView.hidesWhenStopped = YES;
      self.activityIndicatorView.frame = self.view.bounds;
      [self.view addSubview:self.activityIndicatorView];
      

      当然,别忘了:

      #import <QuartzCore/QuartzCore.h>
      

      这样旋转器也将保持不透明。

      【讨论】:

        【解决方案7】:

        @SVMRAJESH 回答 Swift 2.0

         let loadingIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
            loadingIndicator.layer.cornerRadius = 05
        
            loadingIndicator.opaque = false
            loadingIndicator.backgroundColor = UIColor(white: 0.0, alpha: 0.6)
            loadingIndicator.center = self.view.center;
            loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
            loadingIndicator.color = UIColor(red:0.6,green:0.8,blue:1.0,alpha:1.0)
            loadingIndicator.startAnimating()
            self.view.addSubview(loadingIndicator)
        

        【讨论】:

          【解决方案8】:

          从 Xcode 8.3 开始,故事板中有一种方法可以做到这一点:

          1. 将活动视图添加到您的场景中,最好添加到您视图中对象列表的底部,以便它显示在所有内容的“顶部”
          2. 通过添加约束使其覆盖整个视图
          3. 点击属性检查器
          4. 启用“停止时隐藏”
          5. 设置“Alpha”> 0(0.3 为佳)
          6. 将“背景”设置为深色(黑色效果很好)

          这是screenshot

          【讨论】:

            【解决方案9】:

            斯威夫特 3

            设置背景颜色

            activityIndicatorView.backgroundColor = UIColor.gray // Set Activity indicator backgroundColor 
            

            创建和配置活动指示器

            var activityIndicatorView   : UIActivityIndicatorView! // Declare variable to hold activity indicator
            

            在 viewDidLoad 中,调用下面的方法来创建和配置活动指示器,也不要忘记通过在 viewDidLoad 中调用view.addSubview(activityIndicatorView) 来添加到视图(您想要显示活动指示器的位置)。同时对其设置约束。

            func createAndconfigureActivityIndicatorView() {
            
                    activityIndicatorView  = UIActivityIndicatorView(activityIndicatorStyle: .white) 
            
                    activityIndicatorView.backgroundColor = UIColor.gray // Set Activity indicator backgroundColor 
            
                    activityIndicatorView.startAnimating() // To start animation
            
                    activityIndicatorView.hidesWhenStopped = true // Setting this true means, when you stop the activity indicator, its automatically hidden (see below)
            }
            
            // Stops and Hides Activity Indicator
            activityIndicatorView.stopAnimating()
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-09-13
              • 1970-01-01
              • 2023-04-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-05-16
              • 1970-01-01
              相关资源
              最近更新 更多