CAGradientLayer不够流畅?

Dri*_*met 4 iphone objective-c ios

我正在CAGradientLayer为我UIView的每一个背景做一个,但我有一个小问题.渐变似乎不够平滑.颜色之间的过渡将呈现.你可以在这张照片中看到它.

错误的渐变截图

这就是我在UIView的初始化程序中实现此渐变的方法.

CAGradientLayer *layer = [CAGradientLayer layer];
layer.colors = [NSArray arrayWithObjects:
                (id)[[UIColor darkKinepolisColor] CGColor],
                (id)[[UIColor lightKinepolisColor] CGColor],
                (id)[[UIColor lightKinepolisColor] CGColor],
                (id)[[UIColor darkKinepolisColor] CGColor],
                nil];
layer.locations = [NSArray arrayWithObjects:
                   [NSNumber numberWithFloat:0],
                   [NSNumber numberWithFloat:0.4],
                   [NSNumber numberWithFloat:0.6],
                   [NSNumber numberWithFloat:1],
                   nil];
layer.startPoint = CGPointMake(0, 0);
layer.frame = self.layer.bounds;
layer.endPoint = CGPointMake(1, 1);
layer.contentsGravity = kCAGravityResize;
[self.layer addSublayer:layer];
Run Code Online (Sandbox Code Playgroud)

优秀的开发人员可以帮我解决这个问题吗?谢谢!

Tho*_*asW 5

从我所看到的CAGradientLayer不支持抖动,但CGGradient确实如此.在这里看到我的答案.另请参阅其他答案,例如使用CGGradient.


hoo*_*oop 2

这不就是 8 位颜色值的结果吗?颜色之间的步距尽可能小。

即,如果您想要 rgb(100,100,100) 和 rgb(109,109,109) 之间的渐变,它只能在 10 个像素的渐变宽度上完全平滑。如果您尝试在 100 像素的宽度上绘制此渐变,您将得到 10 个 10 像素宽的颜色块,并且看起来非常块状。还会发生什么?

您可以通过抖动和添加噪音使其看起来更平滑,但没有内置功能可以实现此目的。

因此,要么选择相距较远的颜色,在较短的距离上绘制渐变,要么在 Photoshop 中制作图形并应用噪点和抖动以使其看起来更平滑。