四、CAShapeLayer
CAShapeLayer是图形layer层,我们可以自定义这个层的形状。先来看其中我们可以使用的属性和方法:
@property(nullable) CGPathRef path;
path属性为CAShapeLayer设置一个边界路径,例如我们可以创建一个三角形的路径通过如下代码:
CAShapeLayer * layer = [CAShapeLayer layer];
layer.position=CGPointMake(0,0);
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, 0, 100, 100);
CGPathAddLineToPoint(path, 0, 300, 100);
CGPathAddLineToPoint(path, 0, 200, 200);
CGPathAddLineToPoint(path, 0, 100, 100);
layer.path=path;
仅仅有路径,不能将我们想要的形状画出来,下面一些属性可以对图形的一些基础属性进行设置:
//设置图形的填充颜色
@property(nullable) CGColorRef fillColor;
/*
设置图形的填充规则 选项如下:
非零填充
NSString *const kCAFillRuleNonZero;
奇偶填充
NSString *const kCAFillRuleEvenOdd;
*/
@property(copy) NSString *fillRule;
//设置线条颜色
@property(nullable) CGColorRef strokeColor;
//设置线条的起点与终点 0-1之间
@property CGFloat strokeStart;
@property CGFloat strokeEnd;
//设置线条宽度
@property CGFloat lineWidth;
//设置两条线段相交时锐角斜面长度
@property CGFloat miterLimit;
/*
设置线条首尾的外观
可选参数如下
无形状
NSString *const kCALineCapButt;
圆形
NSString *const kCALineCapRound;
方形
NSString *const kCALineCapSquare;
*/
@property(copy) NSString *lineCap;
/*
设置线段的链接方式
棱角
NSString *const kCALineJoinMiter;
平滑
NSString *const kCALineJoinRound;
折线
NSString *const kCALineJoinBevel;
*/
@property(copy) NSString *lineJoin;
修改一下上面的代码,如下:
CAShapeLayer * layer = [CAShapeLayer layer];
layer.position=CGPointMake(0,0);
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, 0, 100, 100);
CGPathAddLineToPoint(path, 0, 300, 100);
CGPathAddLineToPoint(path, 0, 200, 200);
CGPathAddLineToPoint(path, 0, 100, 100);
layer.path=path;
layer.fillColor= [UIColor redColor].CGColor;
layer.fillRule = kCAFillRuleEvenOdd;
layer.strokeColor = [UIColor blueColor].CGColor;
layer.strokeStart =0;
layer.strokeEnd =0.5;
layer.lineWidth = 5;
layer.miterLimit = 1;
layer.lineJoin = kCALineJoinMiter;
[self.view.layer addSublayer:layer];
效果如下:
除此之外,我们还可以设置边界的线条为虚线,通过下面两个属性:
//设置线段的宽度为5px 间距为10px
/*
这个数组中还可以继续添加,会循环进行设置 例如 5 2 1 3 则第一条线段5px,间距2px,第二条线段1px 间距3px再开始第一条线段
*/
layer.lineDashPattern = @[@05,@10];
//设置从哪个位置开始
layer.lineDashPhase =5;
如下:
五、CATextLayer
CATextLayer可以进行文本的绘制,属性方法如下:
//渲染的文字字符串
@property(nullable, copy) id string;
//设置字体
@property(nullable) CFTypeRef font;
//设置字号
@property CGFloat fontSize;
//设置文字颜色
@property(nullable) CGColorRef foregroundColor;
//是否换行
@property(getter=isWrapped) BOOL wrapped;
/*
设置截断模式
NSString * const kCATruncationNone;
截断前部分
NSString * const kCATruncationStart;
截断后部分
NSString * const kCATruncationEnd;
截断中间
NSString * const kCATruncationMiddle;
*/
@property(copy) NSString *truncationMode;
/*
设置文字对齐模式
NSString * const kCAAlignmentNatural;
NSString * const kCAAlignmentLeft;
NSString * const kCAAlignmentRight;
NSString * const kCAAlignmentCenter;
NSString * const kCAAlignmentJustified;
*/
@property(copy) NSString *alignmentMode;