我正在为我的UIViews的每个背景做一个CAGradientLayer,但我有一个小问题。梯度似乎不够平滑。颜色之间的过渡是要呈现的。你可以在这张照片中看到它。

这就是我在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];你们这些优秀的开发人员能帮我解决这个问题吗?谢谢!
发布于 2012-02-19 18:07:09
据我所知,CAGradientLayer不支持抖动,但CGGradient支持。请参阅我的答案here。有关使用CGGradient的示例,请参阅其他答案。
发布于 2011-09-26 21:18:47
这不只是8位颜色值的结果吗?颜色之间的步长尽可能地小。
也就是说,如果你想要rgb(100,100,100)和rgb(109,109,109)之间的渐变,它只能在10像素的渐变宽度上完美平滑。如果你试图在100个像素的宽度上绘制这个渐变,你会得到10个10px宽的颜色块,它看起来会非常块状。还能发生什么呢?
你可以通过抖动和添加噪声来使它看起来更平滑,但没有内置的函数。
所以,要么选择更远的颜色,在更短的距离上绘制渐变,要么在Photoshop中制作图形,并应用噪声和抖动来使其看起来更平滑。
发布于 2013-06-16 13:07:40
我正在开发一个需要基础渐变的应用程序,根据不同的因素(例如:一天中的时间),各种其他渐变都会淡入其中。我发现除了基础渐变之外,我可以继续使用CAGradientLayer。对于基础渐变,我在photoshop中创建了它,并添加了0.554%的噪波。几乎察觉不到,但它防止了带状效果时,我动画的CAGradientLayer的阿尔法在它上面。
所以我猜答案是你至少需要一个梯度上的抖动/噪声来避免条带效应。也可以通过编程方式或通过在噪波层上具有低alpha (~0.1f)的CAGradientLayer上加载带有噪波的预渲染黑色图像来添加此功能。
https://stackoverflow.com/questions/7554802
复制相似问题