首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAGradientLayer不够流畅?

CAGradientLayer不够流畅?
EN

Stack Overflow用户
提问于 2011-09-26 20:05:46
回答 4查看 7.2K关注 0票数 5

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

这就是我在UIView的初始化器中实现这个渐变的方法。

代码语言:javascript
复制
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];

你们这些优秀的开发人员能帮我解决这个问题吗?谢谢!

EN

回答 4

Stack Overflow用户

发布于 2012-02-19 18:07:09

据我所知,CAGradientLayer不支持抖动,但CGGradient支持。请参阅我的答案here。有关使用CGGradient的示例,请参阅其他答案。

票数 5
EN

Stack Overflow用户

发布于 2011-09-26 21:18:47

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

也就是说,如果你想要rgb(100,100,100)和rgb(109,109,109)之间的渐变,它只能在10像素的渐变宽度上完美平滑。如果你试图在100个像素的宽度上绘制这个渐变,你会得到10个10px宽的颜色块,它看起来会非常块状。还能发生什么呢?

你可以通过抖动和添加噪声来使它看起来更平滑,但没有内置的函数。

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

票数 2
EN

Stack Overflow用户

发布于 2013-06-16 13:07:40

我正在开发一个需要基础渐变的应用程序,根据不同的因素(例如:一天中的时间),各种其他渐变都会淡入其中。我发现除了基础渐变之外,我可以继续使用CAGradientLayer。对于基础渐变,我在photoshop中创建了它,并添加了0.554%的噪波。几乎察觉不到,但它防止了带状效果时,我动画的CAGradientLayer的阿尔法在它上面。

所以我猜答案是你至少需要一个梯度上的抖动/噪声来避免条带效应。也可以通过编程方式或通过在噪波层上具有低alpha (~0.1f)的CAGradientLayer上加载带有噪波的预渲染黑色图像来添加此功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7554802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档