layer绘制渐变色

layer绘制渐变色

– (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();

    NSArray *colors = [NSArray arrayWithObjects:HEXCOLOR(0x769DC5),HEXCOLOR(0x4F5B9B), nil];

    [self drawGradientColor:context rect:rect options:kCGGradientDrawsAfterEndLocation colors:colors];

    CGContextStrokePath(context);// 描线,即绘制形状

    CGContextFillPath(context);// 填充形状内的颜色

}

/**

 * 绘制背景色渐变的矩形,p_colors渐变颜色设置,集合中存储UIColor对象(创建Color时一定用三原色来创建)

 **/

– (void)drawGradientColor:(CGContextRef)pContext

                     rect:(CGRect)pClipRect

                  options:(CGGradientDrawingOptions)pOptions

                   colors:(NSArray *)pColors {

    CGContextSaveGState(pContext);// 保持住现在的context

    CGContextClipToRect(pContext, pClipRect);// 截取对应的context

    int colorCount = (int)pColors.count;

    int numOfComponents = 4;

    CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();

    CGFloat colorComponents[colorCount * numOfComponents];

    

    for (int i = 0; i < colorCount; i++) {

        UIColor *color = pColors[i];

        CGColorRef temcolorRef = color.CGColor;

        const CGFloat *components = CGColorGetComponents(temcolorRef);

        for (int j = 0; j < numOfComponents; ++j) {

            colorComponents[i * numOfComponents + j] = components[j];

        }

    }

    

    CGGradientRef gradient =  CGGradientCreateWithColorComponents(rgb, colorComponents, NULL, colorCount);

    CGColorSpaceRelease(rgb);

    CGPoint startPoint = pClipRect.origin;

    CGPoint endPoint = CGPointMake(CGRectGetMinX(pClipRect), CGRectGetMaxY(pClipRect));

    CGContextDrawLinearGradient(pContext, gradient, startPoint, endPoint, pOptions);

    CGGradientRelease(gradient);

    CGContextRestoreGState(pContext);// 恢复到之前的context

}

 //加阴影

 _bgView.layer.shadowColor = [UIColor
grayColor].CGColor;//shadowColor阴影颜色

 _bgView.layer.shadowOffset =
CGSizeMake(2,1);//shadowOffset阴影偏移,x向右偏移4y向下偏移4,默认(0,
-3),
这个跟shadowRadius配合使用

 _bgView.layer.shadowOpacity =
0.5;//阴影透明度,默认0

 _bgView.layer.shadowRadius =
3;//阴影半径,默认3

转载自:https://blog.csdn.net/haixialu/article/details/50267701

You may also like...