2010-04-16 63 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