美文网首页
iOS圆形渐变(聚光灯效果实现)

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

作者: Asing_liu | 来源:发表于2017-01-12 15:11 被阅读0次
    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圆形渐变(聚光灯效果实现)

          本文链接:https://www.haomeiwen.com/subject/acgdbttx.html