gpt4 book ai didi

iphone - 将渐变应用于 CAShapeLayer

转载 作者:行者123 更新时间:2023-12-03 18:14:52 25 4
gpt4 key购买 nike

有人有将渐变应用于 CAShapeLayer 的经验吗? CAShapeLayer 是一个很棒的图层类,但它似乎只支持纯色填充着色,而我希望它具有渐变填充(实际上是一个可设置动画的渐变)。

与 CAShapeLayer 相关的所有其他内容(阴影、形状、描边颜色、可动画形状路径)都非常棒。

我尝试过将 CAGradientLayer 放置在 CAShapeLayer 内,或者确实将 CAShapeLayer 设置为 GradientLayer 的 mask 并将两者添加到容器层中,但这些都没有正确的结果。

我应该子类化 CAShapeLayer,还是有更好的方法?

谢谢。

最佳答案

您可以使用形状的路径创建 mask 层并将其应用到渐变层上,如下所示:

UIView *v = [[UIView alloc] initWithFrame:self.window.frame];

CAShapeLayer *gradientMask = [CAShapeLayer layer];
gradientMask.fillColor = [[UIColor clearColor] CGColor];
gradientMask.strokeColor = [[UIColor blackColor] CGColor];
gradientMask.lineWidth = 4;
gradientMask.frame = CGRectMake(0, 0, v.bounds.size.width, v.bounds.size.height);

CGMutablePathRef t = CGPathCreateMutable();
CGPathMoveToPoint(t, NULL, 0, 0);
CGPathAddLineToPoint(t, NULL, v.bounds.size.width, v.bounds.size.height);

gradientMask.path = t;


CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.startPoint = CGPointMake(0.5,1.0);
gradientLayer.endPoint = CGPointMake(0.5,0.0);
gradientLayer.frame = CGRectMake(0, 0, v.bounds.size.width, v.bounds.size.height);
NSMutableArray *colors = [NSMutableArray array];
for (int i = 0; i < 10; i++) {
[colors addObject:(id)[[UIColor colorWithHue:(0.1 * i) saturation:1 brightness:.8 alpha:1] CGColor]];
}
gradientLayer.colors = colors;

[gradientLayer setMask:gradientMask];
[v.layer addSublayer:gradientLayer];

如果您还想使用阴影,则必须在渐变图层下放置形状图层的“副本”,循环使用相同的路径引用。

关于iphone - 将渐变应用于 CAShapeLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4733966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com