在iPad 1和2上无法正确显示CGGradient

时间:2012-06-11 22:18:09

标签: ios ipad gradient quartz-graphics

我一直在尝试在iOS应用中为UI创建自己的渐变。我第一次使用CAGradientLayer,但我对“阶梯式”外观感到失望,所以我一直在试用CGGradient。

   - (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); 

    }

我遇到了Gradient正确显示的问题。我有三个iPad - 每代一个。渐变看起来在iPad 3上,但不在iPad 1或2上。这真的很奇怪。我打算截取并发布两个差异,但更奇怪的是,截图看起来是一样的(是的,两者的亮度都是一样的)。

旧iPad上的颜色看起来真的很糟糕。我知道iPad 3是一个视网膜显示器,但我认为它必须不仅仅是那个。

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

1 个答案:

答案 0 :(得分:0)

正如DavidRönnqvist指出的那样,这个问题的答案是,这些设备根本不会以同样的方式显示颜色。没有一个简单的解决方案,也许一个解决方案就是杀死。