2012-06-11 58 views
1

我一直在嘗試在我的iOS應用程序中爲UI創建自己的漸變。我第一次使用CAGradientLayer,但對「階梯」外觀感到失望,所以我一直在嘗試CGGradient。CGGradient在iPad 1和2上無法正確顯示

- (void)drawRect:(CGRect)rect 
    { 

     CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

     CGGradientRef skyGradient; 
     CGColorSpaceRef rgbColorspace; 
     size_t num_locations = 3; 
     CGFloat locations[3] = { 0.0, .5, 1.0 }; 
     CGFloat components[12] = { .106, .73, .93333, 1., 
            0.0, 0.0 , 1.0,  1., 
            .106, .73, .93333, 1. }; 

     rgbColorspace = CGColorSpaceCreateDeviceRGB(); 
     skyGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations); 

     CGRect currentBounds = self.bounds; 
     CGPoint topLeft = CGPointMake(0.0f, 0.0f); 
     CGPoint bottomRight = CGPointMake(CGRectGetMaxX(currentBounds), CGRectGetMaxY(currentBounds)); 
     CGContextDrawLinearGradient(currentContext, skyGradient, topLeft, bottomRight, 0); 

     CGGradientRelease(skyGradient); 
     CGColorSpaceRelease(rgbColorspace); 

    } 

我遇到了梯度顯示正常的問題。我有三臺iPad,每臺一臺。漸變看起來就在iPad 3上,但不在iPad 1或2上。這真的很奇怪。我打算截圖併發布這兩個區別,但更奇怪的是,截圖看起來是一樣的(是的,兩者的亮度都是一樣的)。

顏色似乎真的在舊的iPad上被淘汰了。我知道iPad 3是一個視網膜顯示器,但我認爲它一定是更多的東西。

Not a great picture, but you can still see a drastic difference.

+1

你確定這是代碼而不僅僅是屏幕?如果您在Mac上的圖像編輯器中渲染相同的漸變並在兩臺設備上並排顯示完全相同的圖像,會發生什麼情況? –

+0

好想法,我會試試看。 – daveMac

+0

@DavidRönnqvist我按照您的建議做了,並使用了來自Illustrator的圖像,並使用完全相同的漸變設置。和以前一樣,iPad 3與我的Cinema Display顏色相同(或相似)。另外兩個iPad和我的iPhone 4甚至都沒有接近。所以我有點擔心我能如何在多個設備上實現一致的UI。有任何想法嗎? – daveMac

回答

0

回答這個問題,因爲大衛Rönnqvist指出的是,這些設備根本就無法顯示的顏色一樣。這並不是一個簡單的解決方案,也許一個解決方案將會被殺死。