0

Должно быть очень просто создать радиальный градиент от черного до белого с использованием Core Graphics, но даже после многих попыток я не могу понять, где я ошибаюсь.Радиальный градиент от черного до белого дает полный черный экран

Я хочу что-то вроде этого: enter image description here

Это мой код:

CGFloat radius = shapeRect.size.width/2.0; 
CGPoint center = CGPointMake(shapeRect.origin.x+shapeRect.size.width/2, shapeRect.origin.y+shapeRect.size.height/2); 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); 
CGContextRef context = CGBitmapContextCreate(NULL, shapeRect.size.width, shapeRect.size.height, 8, shapeRect.size.width*4, colorSpace, kCGImageAlphaNone); 
CGFloat components[] = {0.0, 1.0}; 
CGFloat locations[] = {0.0, 1.0}; 
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, 2); 
CGContextDrawRadialGradient(context, gradient, center, 10, center, radius, 0); 

CGImageRef img = CGBitmapContextCreateImage(context); 
[maskedView setImage:[UIImage imageWithCGImage:img]]; 

CGGradientRelease(gradient); 
CGContextRelease(context); 
CGColorSpaceRelease(colorSpace); 

Микросхема имеет здесь self.view границы.

Я получаю весь черный экран без градиента в качестве выхода. Я использую симулятор iPhone 7.

Ваши предложения помогут вам сэкономить мой день

Thank you.

ответ

0

Проверьте этот фрагмент. Вы можете изменить значения components и locations, чтобы получить то, что вы хотите, и понять, как работает чертеж. См CGGradientCreateWithColorComponentsdescription

#import "TestView.h" 

@implementation TestView { 
    CGGradientRef _gradient; 
} 

-(void)drawRect:(CGRect)rect 
{ 
    CGFloat radius = self.frame.size.width/2.0; 
    CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGGradientRef gradient = [self createGradient]; 
    CGContextDrawRadialGradient(context, gradient, center, 10, center, radius, kCGGradientDrawsBeforeStartLocation); 
} 

-(CGGradientRef)createGradient 
{ 
    if (!_gradient) { 
     CGFloat components[] = { 0.0, 1.0, 0.5, 0.5, 1.0, 0.3 }; 
     CGFloat locations[] = { 0.0, 0.6, 1.0 }; 
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); 
     _gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, 3); 
     CGColorSpaceRelease(colorSpace); 
    } 
    return _gradient; 
} 

- (void)layoutSubviews 
{ 
    self.backgroundColor = [UIColor whiteColor]; 
    self.layer.borderColor = [UIColor lightGrayColor].CGColor; 
    self.layer.borderWidth = 1.; 
} 


@end 

Результат:

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^