2011-02-08 11 views
0

나는 슬라이더의 값에 따라 윈도우의 알파 값을 설정하는 아래의 메소드를 가지고 있습니다.하지만 윈도우의 내용도 반투명이됩니다. 결국 창문으로 사라진다.전체 윈도우가 아닌 윈도우 배경의 알파 변경하기

윈도우의 알파 값 만 변경하고 내부의 내용보기는 변경하는 방법이 있습니까?

- (IBAction)changeTransparency:(id)sender { 
// Set the window's alpha value. This will cause the views in the window to redraw. 
[self.window setAlphaValue:[sender floatValue]];} 

감사합니다.

답변

2

Apple's docs이 방법이 있습니다. 핵심은 윈도우의 backgroundColor의 알파를 원하는 값으로 설정하는 것입니다. 또한 창 opaque 속성을 NO (기본값 : YES)으로 설정해야합니다.

e.x.

// At some point in your code... 
[window setOpaque:NO]; 

// Then in your changeTransparency: method... 
NSColor *backgroundColor = [window backgroundColor]; 
backgroundColor = [backgroundColor colorWithAlphaComponent:[sender floatValue]]; 

[window setBackgroundColor:backgroundColor]; 
0

다른 방법이 있습니다.

가정 할 때 self.window < --- 기본보기와이 알파는 변경됩니다 (하지만 exacatly fake). subView1, subView2 < -이보기는 self.window의 내용입니다. theier alpha는 변경되어서는 안됩니다.

self.window.backgroundColor = [UIColor clearColor]; 

UIView* anAlphaView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.window.frame.size.widht, self.window.frame.size.height)]; 
anAlphaView.backgroundColor = [UIColor blackColor]; // as you want 
anAlphaView.alpha = 0.5f; // as you want. 
[self.window addSubview:anAlphaView]; 
[anAlphaView release]; 

[self.window addSubview:subView1]; // you should add sub views to self.window 
[self.window addSubview:subView2]; 

당신은 위의 코드를 사용하는 방법을 만들 수 있습니다 :)