首页 文章

CAGradientLayer无法正确绘制渐变

提问于
浏览
0

我使用CAShapeLayer绘制一个圆并将其设置为CAGradientLayer的掩码,这里是代码:

CAShapeLayer *circleShapeLayer = [CAShapelayer new];
// draw circle path code here...

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = @[(__bridge id)[UIColor whiteColor].CGColor,
                         (__bridge id)[UIColor clearColor].CGColor];
// self here means a UIView
gradientLayer.mask = circleShapeLayer;
gradientLayer.frame = self.bounds;
[self.layer addSublayer:gradientLayer];

当我运行应用程序时,它将显示一个渐变圆,但渐变很奇怪 .

我想要的是一个圆圈,在起点,颜色是白色,在终点颜色是清晰的颜色,它应该是这样的:

enter image description here

但模拟器屏幕中圆圈的颜色为:

enter image description here

颜色是对称的 .

我认为问题是我没有正确设置 gradientLayer.colors ,我该如何解决?

3 回答

  • 0

    CAGradientLayer无法沿弧绘制渐变 . 另一方面,掩模层的框架比渐变层的框架太小,看不到清晰的颜色

  • 0

    一开始对Umair 's response, it didn' t有意义,因为即使 whiteColorblackColorcolorWithRed:green:blue:alpha 提取,但我在文档中读到了这个:

    渲染时,颜色在插入之前映射到输出颜色空间 .

    所以也许这就是它:

    gradientLayer.colors = @[(__bridge id)[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f].CGColor,
                             (__bridge id)[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:0.0f].CGColor];
    
  • 1

    @ J.Hunter的answer是正确的,因为 CAGradientLayer 不能沿弧线绘制 . 这意味着您绘制的渐变将限制为 radiallinear . 你特意想要创建一个 angled 渐变,我过去也试过这个渐变 .

    不幸的是, CAGradientLayer 受这些限制的约束,我发现创建蒙版角度渐变的最佳方法是使用包含倾斜渐变的 UIImage 进行遮罩 . 这不会像绘制自己的渐变那样动态,但它似乎是目前最好的(可能是唯一的)选项 .

相关问题