Iphone 在iOS中加载UIView时如何为UIActivityIndicator设置灰色背景

Iphone 在iOS中加载UIView时如何为UIActivityIndicator设置灰色背景,iphone,ios,uiactivityindicatorview,viewdidload,Iphone,Ios,Uiactivityindicatorview,Viewdidload,我现在有一个UIActivityIndicator出现在屏幕上一两秒钟。我想设置灰色的背景,因为这在屏幕上出现,但我不知道如何做到这一点 以下是我到目前为止初始化指示器的方式 - (void)viewDidLoad { //... activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)]; [activity setCenter:CGPointM

我现在有一个
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];


}

任何帮助都将不胜感激。

您可以将背景色为黑色且不透明度为0.5的视图放到窗口中。将其放入窗口将同时阻止导航控制器和选项卡栏控制器。

您应该查看

它有掩蔽背景的选项,使用起来非常简单

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)
};`

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

    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];

事实上,我认为你可以做得更简单:)

可以在情节提要中设置背景色,也可以使用

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

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

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

当然,别忘了:

#import <QuartzCore/QuartzCore.h>
#导入
这样,微调器也将保持不透明。

试试这个简单的方法。 这对我来说很有效

- (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];
}

@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)

从Xcode 8.3开始,在情节提要中有一种方法可以做到这一点:

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

  • 这是一本。

    Swift 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()
    

    请澄清你所说的“背景灰显”是什么意思。你在整个屏幕上加了一个“阴影”吗?否则会让它黯然失色吗?或者更改要禁用的表视图行?或者别的什么?遮住整个视图,或者只遮住tableview,而不是navigationcontroller。我猜它是一种背景框,它是黑色的,不透明度设置为.5或者其他什么。。。我只是不知道,因为我以前从未见过这样做。。我正在四处寻找一个好方法的例子。。但它们很薄,而且介于…弥迦所说的,也是我所做的。我将代码放入AppDelegate中。每当我需要阻止UI时,我都会得到一个对AppDelegate的引用,并调用该方法来添加“地毯视图”,正如我喜欢称之为:)是的,我已经看过好几次了。。但是我想自己学习如何设置这个。。但是我想这可能是我应该在我的项目中使用的东西..只需查看该项目的源代码。最简单的方法是用半透明的黑色背景制作一个与窗口大小相同的“叠加”视图。然后将活动指示器添加为覆盖视图的子视图。是否可以使用计时器设置这些指示器?好的,非常感谢。。我想我现在要试试看。。因为它有一些很好的功能。[自执行选择器:@selector(showSpinner)with object:nil afterDelay:5];[自执行选择器:@selector(dismissspinner),对象:nil afterDelay:10];嗯,这看起来不错,但我在
    [activity.layer…]
    行中遇到了一个错误。它说“例如,Receiver type‘CALayer’方法是一个转发声明。”我将“activityIndicatorView”设置为我的VC的一个属性,我还需要做什么才能使它工作?编辑:另外,我使用的是ARC,所以我也没有最后一行。你包括QuartzCore.h了吗?
    var activityIndicatorView   : UIActivityIndicatorView! // Declare variable to hold activity indicator
    
    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()