2010-04-16 65 views
2

我想“变暗”UIView一定量。现在,我做的变黑是这样的:变暗UIView

UIView *overlay = [[UIView alloc] initWithFrame:mainView.bounds]; 
overlay.backgroundColor = [UIColor blackColor]; 
overlay.alpha = 0.5f; 
[mainView addSubview:overlay]; 

不幸的是,这也增加了一个半透明的黑色覆盖到的mainView部分是透明的。有什么方法可以使不透明部分变暗吗?

回答

5

下面是一些尝试。我从来没有使用过UIRectFillUsingBlendMode。

-(void) drawRect:(CGRect)inDirty { 
    [[UIColor colorWithWhite:0.0 alpha:0.5] setFill]; 
    UIRectFillUsingBlendMode(inDirty , kCGBlendModeDarken); 
} 

实现此功能的视图必须设置为仅与您想要影响的其他视图进行合成。这可能意味着一个包含此视图的父视图以及您想要变暗的所有其他视图。

你也可以看看CGContextSetBlendMode。

+0

这看起来很有希望!我不确定你的意思是与其他视图合成,但(我是UIView noob)。在我的例子中,我可以重写drawRect:在mainView中吗? – igul222 2010-04-16 19:05:10

+0

混合模式变暗会使已经在同一上下文中绘制的其他所有内容变暗。这意味着你想要变暗的任何观点必须已经吸收到你将要绘制的相同背景中。在'drawRect:'中对当前上下文的控制取决于系统,我不确定它是如何执行的。如果它为每个视图创建一个全新的上下文,那么这个代码将不会做任何事情。如果这不起作用,您可以将视图渲染成图像,然后如上所述绘制图像并使其变暗。 – drawnonward 2010-04-17 01:38:20

+0

这不是很慢吗? – hfossli 2012-12-20 10:43:38

0

尝试使用类似这样的东西(调整颜色,显然)?

overlay.backgroundColor = [UIColor colorWithRed:0.317647 green:0.317647 blue:0.317647 alpha:0.85];

+0

你不会设置背景颜色为(0,0,0,0.85)吗? – 2010-04-16 01:19:05