gpt4 book ai didi

ios - 如何在 CALayer 中绘制径向渐变?

转载 作者:IT王子 更新时间:2023-10-29 07:56:42 36 4
gpt4 key购买 nike

我知道 CAGradientLayer 目前不支持径向渐变,只有 kCAGradientLayerAxial 选项。

我想要如下内容:

enter image description here

我四处寻找这个问题,发现有办法解决这个问题。但我并不清楚这些解释。所以我想知道我是否可以使用 CAGradientLayer 绘制径向渐变,如果可以,那么该怎么做?

最佳答案

据我了解,您只需要一个绘制渐变的层,而 CGContextDrawRadialGradient 可以完美地满足该需求。重申一下你所说的,CAGradientLayer 不支持径向渐变,我们对此无能为力,除了可以使用 CALayer 子类干净地完成的不必要的混合.

(注意:渐变绘图代码是 taken from here 。这不是这个答案的内容。)


viewDidLoad:

GradientLayer *gradientLayer = [[GradientLayer alloc] init];
gradientLayer.frame = self.view.bounds;

[self.view.layer addSublayer:gradientLayer];

CALayer 子类:

- (instancetype)init
{
self = [super init];
if (self) {
[self setNeedsDisplay];
}
return self;
}

- (void)drawInContext:(CGContextRef)ctx
{

size_t gradLocationsNum = 2;
CGFloat gradLocations[2] = {0.0f, 1.0f};
CGFloat gradColors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.5f};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum);
CGColorSpaceRelease(colorSpace);

CGPoint gradCenter= CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
CGFloat gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ;

CGContextDrawRadialGradient (ctx, gradient, gradCenter, 0, gradCenter, gradRadius, kCGGradientDrawsAfterEndLocation);


CGGradientRelease(gradient);
}

enter image description here

关于ios - 如何在 CALayer 中绘制径向渐变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26907352/

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