iOS圆形渐变(聚光灯效果实现)

  1. 实现效果图如下,具体颜色按实际需要更改即可。


    iOS圆形渐变(聚光灯效果实现)_第1张图片
    屏幕快照 2017-01-12 14.57.33.png
  2. 实现方案思路 新建一个UIView的子类(CustomView),然后重写CustomView的drawRect:方法,将这个渐变背景色画在view上。在外边使用该view,只需要指定聚光灯的位置,和聚光灯的大小。

以下为CustomView里面具体方案的代码实现


- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        self.backgroundColor = [UIColor whiteColor];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    [self draw];
}

- (void)draw {
    
    // 创建色彩空间对象
    CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
    // 创建起点和终点颜色分量的数组
    CGFloat colors[] =
    {
        1, 0, 0, 1.00,//start color(r,g,b,alpha)
        255, 255, 255, 1.00,//end color
    };
    
    //形成梯形,渐变的效果
    CGGradientRef gradient = CGGradientCreateWithColorComponents
    (rgb, colors, NULL, 2);

//    NSLog(@"%lu",sizeof(colors)/(sizeof(colors[0])*4));
    
    // 起点颜色起始圆心
    CGPoint start = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
    // 终点颜色起始圆心
    CGPoint end = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
    // 起点颜色圆形半径
    CGFloat startRadius = 0.0f;
    // 终点颜色圆形半径
    CGFloat endRadius = 100;
    // 获取上下文
    CGContextRef graCtx = UIGraphicsGetCurrentContext();
    // 创建一个径向渐变
    CGContextDrawRadialGradient(graCtx, gradient, start, startRadius, end, endRadius, 0);
    
    //releas
    CGGradientRelease(gradient);
    gradient=NULL;
    CGColorSpaceRelease(rgb);
}
  1. 方法中主要函数介绍
    这里主要用到了CGContextDrawRadialGradient和CGGradientCreateWithColorComponents函数
void CGContextDrawRadialGradient(
 CGContextRef context, //绘制图形的上下文
CGGradientRef gradient, //一个渐变梯度CGGradientRefCGPoint startCenter, // 颜色渐变起点的中心点CGFloat startRadius, // 起点的半径 
CGPoint endCenter, // 颜色渐变终点的中心点
CGFloat endRadius, //终点的半径
CGGradientDrawingOptions options //当你的起点或者终点不在图形上下文的边缘内时,指定该如何处理。你可以使用你的开始或结束颜色来填充渐变以外的空间。此参数为以下值之一:KCGGradientDrawsAfterEndLocation扩展整个渐变到渐变的终点之后的所有点 KCGGradientDrawsBeforeStartLocation扩展整个渐变到渐变的起点之前的所有点。0不扩展该渐变。);

对于渐变梯度CGGradientRef的创建我们可以使用CGGradientCreateWithColorComponents函数

CGGradientCreateWithColorComponents ( 
CGColorSpaceRef space,//色彩空间 
const CGFloat *components,//颜色分量的数组 
const CGFloat *locations,//位置数组 
size_t count//位置的数量,因为这里我们只用到了两种颜色,所以此参数在demo中为2
);

1)色彩空间:(Color Space)这是一个色彩范围的容器,类型必须是CGColorSpaceRef.对于这个参数,我们可以传入CGColorSpaceCreateDeviceRGB函数的返回值,它将给我们一个RGB色彩空间。
2)颜色分量的数组:这个数组必须包含CGFloat类型的红、绿、蓝和alpha值。数组中元素的数量和接下来两个参数密切。从本质来讲,你必须让这个数组包含足够的值,用来指定第四个参数中位置的数量。所以如果你需要两个位置(起点和终点),那么你必须为数组提供两种颜色。
3) 位置数组:颜色数组中各个颜色的位置。此参数控制该渐变从一种颜色过渡到另一种颜色的速度有多快。
4)位置的数量:这个参数指明了我们需要多少颜色和位置。

你可能感兴趣的:(iOS圆形渐变(聚光灯效果实现))