iOS CALayer-实现颜色的渐变和曲线图

来源:互联网 发布:微信开发团队 知乎 编辑:程序博客网 时间:2024/05/22 12:53
最近研究了一下颜色的渐变

效果,下面简单抽出一个类的代码,方便查看:

#import <UIKit/UIKit.h>@interface YXLayerView : UIView{    CAShapeLayer * _lineLayer,* _maskLayer;    CAGradientLayer * _backgroundLayer;}@end

#import "YXLayerView.h"@implementation YXLayerView- (instancetype)init{    self = [super init];    if (self) {        [self inits];    }    return self;}- (instancetype)initWithCoder:(NSCoder *)coder{    self = [super initWithCoder:coder];    if (self) {        [self inits];    }    return self;}- (instancetype)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        [self inits];    }    return self;}- (void)inits{    self.backgroundColor = [UIColor grayColor];    self.clipsToBounds = YES;        _maskLayer = [[CAShapeLayer alloc] init];        _backgroundLayer = [[CAGradientLayer alloc] init];    _backgroundLayer.colors = @[(id)[UIColor redColor].CGColor,(id)[UIColor greenColor].CGColor,(id)[UIColor blueColor].CGColor];    _backgroundLayer.startPoint = CGPointMake(0.5, 0);    _backgroundLayer.endPoint = CGPointMake(0.5, 1.0);    [self.layer addSublayer:_backgroundLayer];        _lineLayer = [[CAShapeLayer alloc] init];    _lineLayer.lineCap = kCALineCapRound;    _lineLayer.lineJoin = kCALineJoinRound;    _lineLayer.fillColor = [UIColor clearColor].CGColor;    _lineLayer.strokeColor = [UIColor redColor].CGColor;    _lineLayer.lineWidth = 5.0;    [self.layer addSublayer:_lineLayer];}// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect {    // Drawing code    CGRect bounds = self.bounds;    CGFloat space = CGRectGetWidth(bounds)/4.0;    CGFloat y = CGRectGetHeight(bounds)/2.0;    UIBezierPath * bezierPath = [UIBezierPath bezierPath];    [bezierPath moveToPoint:CGPointMake(0, y)];    [bezierPath addQuadCurveToPoint:CGPointMake(space, y - 10) controlPoint:CGPointMake(space/2.0, y - 80)];    [bezierPath addQuadCurveToPoint:CGPointMake(2 * space, y - 10) controlPoint:CGPointMake(space + space/2.0, y - 80)];    [bezierPath addQuadCurveToPoint:CGPointMake(3 * space, y - 40) controlPoint:CGPointMake(2 * space + space/2.0, (y - 40)/2.0)];    [bezierPath addQuadCurveToPoint:CGPointMake(4 * space, y) controlPoint:CGPointMake(3 * space + space/2.0, y/2.0)];    _lineLayer.path = bezierPath.CGPath;        _backgroundLayer.frame = bounds;    [bezierPath addLineToPoint:CGPointMake(CGRectGetWidth(bounds), CGRectGetHeight(bounds))];    [bezierPath addLineToPoint:CGPointMake(0, CGRectGetHeight(bounds))];    [bezierPath closePath];    _maskLayer.path = bezierPath.CGPath;    _backgroundLayer.mask = _maskLayer;}@end


0 0
原创粉丝点击