2011-05-10 33 views
8

我有兩個UIColor實例並希望使用它們來創建漸變。代碼工作,但它給了我,當我打電話arrayWithObject:構造一個警告:我如何在CGGradient中舒服地使用NSArray中的CGColor

警告:語義問題:不兼容 指針類型發送「CGColorRef」 (又名「結構CGColor *」),以參數類型的 'id'

我懷疑有潛在的其他問題與警告有關(例如泄漏)。下面是摘錄:

UIColor *startColor, *endColor; 
    // ... 
    NSArray *colors = [NSArray arrayWithObjects: 
         startColor.CGColor, endColor.CGColor, nil]; 
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, 
        (CFArrayRef) colors, NULL); 

我如何重寫代碼以一種安全的方式擺脫這一警告的?

  • 我試着手動創建一個CGArrayRef,但是在一段時間後有點討厭。
  • CGGradientCreateWithColorComponents的作品,但我不喜歡所有顏色分量手動合併成一個CGFloat components[]
+0

你可以使用'CAGradientLayer *梯度= [CAGradientLayer層] ; gradient.frame = view.bounds; gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor],(id)[[UIColor whiteColor] CGColor],nil];' – visakh7 2011-05-10 09:56:58

+0

@ 7KV7,我不這麼認爲。我在drawRect中使用它來創建我的填充形狀(這是一個非矩形多邊形btw)。 – 2011-05-10 09:59:05

+0

也是UIColor * startColor,endColor;應該是UIColor * startColor,* endColor; – visakh7 2011-05-10 10:09:32

回答

24

試試這個

UIColor *startColor, *endColor; 
    // ... 
    NSArray *colors = [NSArray arrayWithObjects: 
         (id)startColor.CGColor, (id)endColor.CGColor, nil]; 
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, 
        (CFArrayRef) colors, NULL); 
+0

這將刪除警告 – visakh7 2011-05-10 10:23:55