2012-04-09 32 views
1

我可以使用CGContextDrawRadialGradient來製作一個球體,它會將一個alpha褪色到UIColor.clearColor並且它可以工作。CGContextDrawRadialGradient對於非圓形發光

不過,我試圖做這種類型的事情:

enter image description here

雖然把一些戰略性領域的周圍,使一個有趣的效果(類似戰略要地的LED背光),我會愛獲得真正的光芒。 如何在drawRect的圓角矩形周圍繪製光暈?

+0

會有一個彩色陰影足夠嗎? – 2012-04-09 22:10:01

+0

@IanHenry不是真的,因爲它會突然結束而不是逐漸變成alphaing。我意識到我可以做幾個不同阿爾法的「戒指」,但我正在尋找一些不太冒險的東西。 – 2012-04-09 22:11:06

+1

陰影的模糊可以在'CGContextSetShadowWithColor'中更改;它允許你做一些與你所顯示的圖像非常相似的東西(儘管你沒有精確地控制陰影漸變)。 – 2012-04-09 22:15:25

回答

2

您可以使用CGContextSetShadowWithColor在任何路徑周圍創建發光效果,但是您無法精確控制外觀。特別是,默認的陰影是相當輕:

the default shadow

而且我知道只有這樣才能使它更暗的超過自身再次繪製:

enter image description here

不是最優的,但它近似於你想要的東西。通過以下drawRect產生

這些圖像:

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGMutablePathRef path = CGPathCreateMutable(); 

    int padding = 20; 
    CGPathMoveToPoint(path, NULL, padding, padding); 
    CGPathAddLineToPoint(path, NULL, rect.size.width - padding, rect.size.height/2); 
    CGPathAddLineToPoint(path, NULL, padding, rect.size.height - padding); 

    CGContextSetShadowWithColor(context, CGSizeZero, 20, UIColor.redColor.CGColor); 
    CGContextSetFillColorWithColor(context, UIColor.blueColor.CGColor); 

    CGContextAddPath(context, path); 
    CGContextFillPath(context); 
    // CGContextAddPath(context, path); 
    // CGContextFillPath(context); 

    CGPathRelease(path); 
} 

有一點要記住的是,呈現模糊的陰影是相當昂貴的,這可能會或可能不會取決於你的觀點如何往往是一個問題重繪。如果陰影不需要製作動畫,請考慮將它們渲染爲UIImage一次,並僅在UIImageView中顯示結果。

+0

你認爲它比2色漸變更昂貴嗎?我的猜測是它會是相似的。 – 2012-04-09 22:48:28

+1

如果你正在繪製徑向漸變,它可能比任意路徑的陰影更便宜,但是如果你想出了一種方法來繪製與陰影相同形狀的漸變,那麼它可能完全相同。只有測試會告訴你! – 2012-04-09 22:52:19

+0

我會把它放在「測試」bin中,它很大,很少被清空(除非有性能或內存問題)。再次感謝 – 2012-04-09 22:56:00