1

在我的浏览器应用程序中,如果响应是 pdf 文件,我正在使用 NSURL 连接下载文件。当我收到数据时,我会显示一个 UIprogressView 来显示下载状态。我想禁用并更改背景视图的颜色,直到下载完成。

在 didReceiveResponse 委托中,我调用了一个方法来创建 progressView 并更改 backgroundcolor 并禁用 parentView

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
[self.fileData setLength:0];
self.totalFileSize = response.expectedContentLength;
[self performSelectorOnMainThread:@selector(startProgressView) withObject:nil waitUntilDone:NO];
}

-(void) startProgressView
{
CGSize frameSize = self.view.frame.size;
CGFloat margin = 30.0;
CGPoint center = self.view.center;

 topLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, margin, frameSize.width-2*margin, 20.)];
 bottomLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, margin, frameSize.width-2*margin, 20.)];

[topLabel setText:@"downloading file"];
[topLabel setCenter:CGPointMake(center.x, center.y - 20.)];
[topLabel setTextAlignment:NSTextAlignmentCenter];

[bottomLabel setText:@"downloadstatus"];
[bottomLabel setCenter:CGPointMake(center.x, center.y + 20.)];
[bottomLabel setTextAlignment:NSTextAlignmentCenter];

self.progressBar = [[UIProgressView alloc] initWithFrame:
                    CGRectMake(0, margin, frameSize.width-2*margin, 20.)];
[self.progressBar setProgress:0];
[self.progressBar setCenter:center];

[self.view addSubview:topLabel];
[self.view addSubview:(self.progressBar)];
[self.view addSubview:bottomLabel];

 /*
CGRect frame = CGRectMake(0.0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
UIView *v = [[UIView alloc] initWithFrame:frame];
[v setBackgroundColor:[[UIColor alloc] initWithRed:255.0
                                             green:0.0
                                              blue:0.0
                                             alpha:0.1]];
[self.view insertSubview:v atIndex:0];
[v release];
*/

[self.view setBackgroundColor: [UIColor colorWithRed:0.0 green:255.0 blue:128.0/255 alpha:0.5]];
[self.view setUserInteractionEnabled:NO];
}

我尝试设置背景颜色,甚至插入一个带有颜色的新视图,但背景颜色没有改变。有人可以指出我是否缺少任何东西。

4

2 回答 2

2

谢谢大家的建议。我找出了背景颜色不可见的原因。viewcontroller(self.view) 的主视图在其顶部包含另外 3 个子视图,并且由于子视图,更改 self.view 的背景颜色是不可见的。要更改背景颜色,我只需创建另一个视图

CGRect frame = CGRectMake(0.0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
backgroundView = [[UIView alloc] initWithFrame:frame];
[backgroundView setBackgroundColor:[[UIColor alloc] initWithRed:204./255 green:213./255 blue:216./255 alpha:0.5]];
[self.view addSubview:backgroundView];

并将其添加到 self.view 中,然后再添加 progressView 。

于 2012-11-16T00:33:06.950 回答
1

进度视图的背景颜色几乎不可见。这是带有红色背景颜色的进度视图的图像:

进度视图

就像你看到的那样,红色只是图像的一小部分。
至于如何改变它,设置它的属性就足够了:

yourView.backgroundColor=[UIColor redColor];
// make it the color that you wish

如果您想很好地看到它,请将其更改为另一种视图,或更改 progressTintColor 属性。

编辑

如果视图没有您想在背景上覆盖的东西,您可以自由地对其进行子类化并在其中绘制。我看了文档,似乎你甚至不需要像 Mac OS X 那样的 UIBezierPath 实例:

- (void) drawRect:(CGRect)rect
{
    [[UIColor redColor] set];  
    UIRectFill(rect);
}
于 2012-11-15T20:47:20.520 回答