美文网首页GuaGua
iOS实现颜色渐变

iOS实现颜色渐变

作者: 淇水朱华 | 来源:发表于2017-05-27 13:44 被阅读1267次

    我们经常会在UIView添加渐变的背景色。虽然找一张渐变颜色的背景图很方便,但是图片是要占用资源的,同时文件也会变大。所以,我们完全可以使用代码来实现效果。
    下面是使用代码来写渐变色的方法。
    1.使用CAGradientLayer实现渐变
    CAGradientLayer是CALayer的一个特殊子类,用于生成颜色渐变的图层,使用较为方便,不过这里的颜色是添加到子图层的,再次添加渐变,会在图层上面添加,非替换。
    下面介绍下它的相关属性:
    1.colors 渐变的颜色
    2.locations 渐变颜色的分割点
    3.startPoint&endPoint 颜色渐变的方向,范围在(0,0)与(1.0,1.0)之间,如(0,0)(1.0,0)代表水平方向渐变,(0,0)(0,1.0)代表竖直方向渐变

    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
        gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, (__bridge id)[UIColor yellowColor].CGColor, (__bridge id)[UIColor blueColor].CGColor];//这里颜色渐变
        gradientLayer.locations = @[@0.3, @0.5, @1.0];//颜色位置
        gradientLayer.startPoint = CGPointMake(0, 0);
        gradientLayer.endPoint = CGPointMake(1.0, 0);
        gradientLayer.frame = CGRectMake(0, 100, 300, 100);渐变区域的大小,一般同view
        [self.view.layer addSublayer:gradientLayer];
    

    2.绘制UIimage渐变图实现渐变,这种方法的好处在于可以直接更换背景,而不是在子图层再添加一个。

        const CGFloat location[] ={0,1};
        const CGFloat components[] ={
            0.0,0.0,0.0,0.6,
            0.0,0.0,0.0,0.0
            
        };
        UIImage *backgroundImage = [self getGradientImageWithSize:self.nBarView.frame.size locations:location components:components count:2];
       _view.backgroundColor = [UIColor colorWithPatternImage:backgroundImage];
    
    //渐变
    - (UIImage *)getGradientImageWithSize:(CGSize)size
                                   locations:(const CGFloat[])locations
                                  components:(const CGFloat[])components
                                       count:(NSInteger)count
    {
        UIGraphicsBeginImageContextWithOptions(size, NO, 0);
        CGContextRef context = UIGraphicsGetCurrentContext();
        //创建色彩空间
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        /*指定渐变色
         space:颜色空间
         components:颜色数组,注意由于指定了RGB颜色空间,那么四个数组元素表示一个颜色(red、green、blue、alpha),
         如果有三个颜色则这个数组有4*3个元素
         locations:颜色所在位置(范围0~1),这个数组的个数不小于components中存放颜色的个数
         count:渐变个数,等于locations的个数
         */
        CGGradientRef colorGradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, count);
        //释放颜色空间
        CGColorSpaceRelease(colorSpace);
        
    //这里调节渐变方向,此时的渐变是上到下
        CGPoint startPoint = (CGPoint){size.width,0};
        CGPoint endPoint = (CGPoint){size.width,size.height};
        /*绘制线性渐变
         context:图形上下文
         gradient:渐变色
         startPoint:起始位置
         endPoint:终止位置
         options:绘制方式,kCGGradientDrawsBeforeStartLocation 开始位置之前就进行绘制,到结束位置之后不再绘制,
         kCGGradientDrawsAfterEndLocation开始位置之前不进行绘制,到结束点之后继续填充
         */
        CGContextDrawLinearGradient(context, colorGradient, startPoint, endPoint, kCGGradientDrawsBeforeStartLocation);
    
        CGGradientRelease(colorGradient);
      
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }
    

    如果想对第一个种方法更深一层研究的话,推荐下面一篇博客
    iOS实现UIView渐变的几种方法以及实现渐变透明功能

    相关文章

      网友评论

        本文标题:iOS实现颜色渐变

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