2011-12-05 27 views
2

我有一些代碼用於用線性漸變填充視圖,我已將它重構爲輔助方法。這在iOS 5.x上畫得很好,但是當我嘗試在4.3.5上運行時,我什麼也沒得到。我已經檢查過所有的CG調用,並且它們都支持4.0或更高版本,它看起來非常簡單,我看不出它爲什麼在4.x上不起作用。在rect中繪製線性漸變在iOS 5.x上工作,但不是4.x

- (void)drawRect:(CGRect)rect { 

CGContextRef context = UIGraphicsGetCurrentContext();  
CGColorRef startColor = [UIColor lightGrayColor].CGColor; 
CGColorRef endColor = [UIColor blackColor].CGColor;  
CGRect paperRect = self.frame; 
[GraphicsHelpers drawLinearGradientWithContext:context 
             inRect:paperRect 
            startColor:startColor 
             endColor:endColor]; 
} 

這裏是一個方法

+ (void)drawLinearGradientWithContext:(CGContextRef)context inRect:(CGRect)rect startColor:(CGColorRef)startColor endColor:(CGColorRef)endColor { 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGFloat locations[] = { 0.0, 1.0 }; 

NSArray *colors = [NSArray arrayWithObjects:(__bridge id)startColor, (__bridge id)endColor, nil]; 

CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, 
                (__bridge CFArrayRef) colors, locations); 

CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect)); 
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect)); 

CGContextSaveGState(context); 
CGContextAddRect(context, rect); 
CGContextClip(context); 

CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0); 
CGContextRestoreGState(context); 

CGGradientRelease(gradient); 
CGColorSpaceRelease(colorSpace); 

}

我發現大部分代碼here的和是偉大的工作,直到我開始對舊的操作系統版本測試,我親近的釋放。

+0

對於您的paperRect,我會使用'self.bounds'而不是'self.frame'。 –

回答

0

如果您使用的是受支持的API,並且從一個版本的操作系統到另一個版本獲得不同的結果,請提交錯誤報告。

+0

我只是想確保在我走這條路線之前我沒有搞砸某些東西。由於大多數時候您認爲存在API錯誤,因此確實是您的錯誤。 – jamone

+0

相同的代碼,不同的操作系統版本,不同的行爲,對吧?這是一個定義錯誤。 – NSResponder

3

我有同樣的問題,解決了 圍繞 它的工作創建使用

CGGradientCreateWithColorComponents 

梯度..而不是CGGradientCreateWithColors。

所以,從淺灰色到黑色的漸變,你需要做到以下幾點:

CGFloat colors[8] = { 
    0.9f, 0.9f, 0.9f, 1.0f, // light gray 
    0.0f, 0.0f, 0.0f, 1.0f // black 
}; 

CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, 2); 

這個工作在兩個的iOS 4和5

1

我不得不面對同樣的問題,作爲一個試圖用漸變填充視圖。最後我發現特定的UIColor(redColor,whiteColor等)與CGColors不兼容。 使用([UIColor whiteColor] .CGColor)爲ios 4.3中不兼容或不支持的CGColor提供服務。爲此,我嘗試使用[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0] .CGColor。這可以轉換成CGColor空間,最後我在我的視圖中也有一個漸變,使用ios 4.3和ios 5.x

+0

很高興知道。我結束了對這個應用程序的4.x支持。我提交了一個bug報告,最終得到了蘋果的迴應,基本上說它是一個bug。但是我們已經從4.x開始,所以我們不會修復。這是可以理解的。 – jamone

相關問題