【问题标题】:Black to White radial gradient is giving whole black screen黑到白的径向渐变给整个黑屏
【发布时间】:2017-02-17 01:10:17
【问题描述】:

使用 Core Graphics 创建黑色到白色的径向渐变应该非常简单,但即使经过多次尝试,我也无法确定哪里出错了。

我想要这样的东西:

这是我的代码:

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);

ShapeRect 这里有 self.view 边界。

我得到一个没有渐变的全黑屏作为输出。 我正在使用 iPhone 7 模拟器。

您的建议可以拯救我的一天

谢谢。

【问题讨论】:

    标签: ios objective-c core-graphics radial-gradients cggradientref


    【解决方案1】:

    请检查这个sn-p。您可以更改componentslocations 的值以获得您想要的内容并了解绘图的工作原理。参考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
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多