2011-05-25 45 views
3

Apple對UIKit的大部分功能都是這樣做的。您只需將tintColor傳遞給元素,它會自動生成一個很好的(大多數情況下)漸變。從動態tintColor生成CGGradient

我碰到this gloss gradient function但結果遠遠不符合我的要求。我知道還有UIColor extensions,其中增加了諸如「lighterColor」和「darkerColor」等方法,但我懷疑它們是用來生成漸變(並因此會產生難看的漸變)。

是否有任何第三方類或功能在那裏以類似的方式做到這一點蘋果是如何做到這一點?

回答

4

動態着色有多種方法,但最簡單的方法是先繪製預渲染的灰度圖像,然後使用kCGBlendModeOverlay在頂部繪製色調顏色。 「覆蓋」混合模式像Photoshop一樣操作,對於着色尤其有用。

下面是我們如何繪製一個自定義的有色導航欄:

- (void)drawRect:(CGRect)rect { 
    [[UIImage imageNamed:@"NavBar.png"] drawInRect:rect]; // grayscale untinted version 
    UIColor *tint = [UIColor colorWithRed:1 green:0.5 blue:0.5 alpha:1]; // arbitrary 
    [tint set]; 
    UIRectFillUsingBlendMode(rect, kCGBlendModeOverlay); 
} 

您可以通過只用你的顏色與疊加混合模式實心填充創建圖層在Photoshop中直接預覽色調的顏色。

蘋果特殊的着色技術UINavigationBar和朋友似乎是色調填充加預渲染漸變圖像覆蓋與名稱,如系統圖稿文件中找到的「UITintedTopBarHighlightFlat.png」的組合。