所以我有一个简单的问题,我有下面的方法,根据滑块的值设置窗口的alpha值,但窗口的内容也变得半透明,最终随窗口消失。
有没有办法只更改窗口的alpha值而不是内部的内容视图?
- (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]];}
谢谢,萨米。
答案 0 :(得分:2)
Apple's docs提供了一种方法。关键是将窗口的backgroundColor
的alpha设置为所需的值。您还必须确保将窗口的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];
答案 1 :(得分:0)
这是另一种方式。
假设, self.window< ---基本视图和这个alpha将被更改(但是exacatly假)。 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];
您可以使用上面的代码制作方法:)