Из того, что я понял, вам нужен слой, который рисует градиент, и CGContextDrawRadialGradient
отлично работает для этой цели. И чтобы повторить то, что вы сказали, CAGradientLayer
не поддерживает радиальные градиенты, и мы ничего не можем с этим поделать, кроме ненужного swizzling, который может быть выполнен с использованием подкласса CALayer
.
(Примечание: код градиента рисунок был taken from here Это не то, что этот ответ о..)
viewDidLoad
:
GradientLayer *gradientLayer = [GradientLayer new];
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));
float gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ;
CGContextDrawRadialGradient (ctx, gradient, gradCenter, 0, gradCenter, gradRadius, kCGGradientDrawsAfterEndLocation);
CGGradientRelease(gradient);
}

Почему вы не можете использовать 'CGContextDrawRadialGradient'? Вы всегда можете отображать изображение, а затем назначать его содержимому 'CALayer'. Использование 'renderInContext' 'CALayer' также является опцией, но все это приводит к' CGContextDrawRadialGradient'. – Mazyod
@Mazyod У меня есть несколько слоев, добавленных как подуровень к моему UIView, и я рисую bezierPath на этих слоях. Таким образом, все свойства, такие как сплошное заполнение, ширина штриха и т. Д., Связаны со слоем. Поэтому просто хочу поддерживать согласованность кода. – blancos
@Mazyod Также я не получил вашу концепцию рендеринга к изображению, а затем назначил его содержимому CALayer. Не могли бы вы рассказать немного больше. – blancos