2012-11-15 87 views
1

在我的瀏覽器應用程序中,如果響應是PDF文件,我使用NSURL連接來下載文件。 當我收到數據時,我會顯示一個UIprogressView來顯示下載狀態。 我想禁用並更改背景視圖的顏色,直到下載完成。更改iOS中視圖的背景顏色

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

的方法我試過設置背景顏色,甚至將有顏色,但背景顏色不會改變一個新的觀點。 有人可以指出是否有任何我缺少的東西。

+0

除了顏色設置(你看到兩個標籤和進度條),其他所有工作都可以嗎? – rdelmar

+0

是除背景顏色外的其他一切作品。我找出了原因。 viewcontroller(self.view)的主視圖包含3個以上的子視圖,並且更改self.view的背景顏色由於子視圖而不可見。 – codemaster

回答

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

,並添加progressView到之前添加到self.view。

1

進度視圖的背景顏色幾乎沒有visible.This是用紅色的背景色進度視圖的圖像:

progress view

就像你看到的紅色只是一小部分圖片。
至於怎麼改,它足以設置它的屬性:

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

如果你想看到它以及它更改爲另一種觀點,或改變progressTintColor屬性。

編輯

如果視圖還沒有要覆蓋的背景是什麼,你可以自由地繼承它並繪製裏面。 我看了文檔,好像你甚至不需要一個UIBezierPath例如像與Mac OS X:

- (void) drawRect:(CGRect)rect 
{ 
    [[UIColor redColor] set]; 
    UIRectFill(rect); 
} 
+0

我正在尋找更改添加進度欄的視圖的背景顏色。我將進度條添加到self.view。爲什麼改變self.view的背景顏色只能用於進度視圖? – codemaster

+0

因爲進度視圖是UIView的一個子類,並添加了這些屬性。我不會在添加進度條的視圖中看到,但如果在背景上沒有任何內容,則可以簡單地使用UIBezier路徑在其中繪製它。 –