转载

CAShapeLayer

在iOS中,一个UIView已经有了CALayer,可是又有一个CAShapeLayer的实现,这个类是CALayer的子类,重新实现了一个CAShapeLayer的原因有下面的这些原因

1. CAShapeLayer使用了硬件加速的方式来绘图,所以比Core Graphics的绘图速度更快

2. CAShapeLayer的内存消耗更少

3. CAShapeLayer中作图可以画到它的边界外面,CALayer中作图的话只会显示layer边界以内的内容

4. pixel和point的坐标系转化

CAShapeLayer可以很方便的使用CAPathRef类型,没必要像CALayer中那么复杂的需要使用类似于CAPathRect, CGContextSetLineWidth这些看似比较复杂的函数。

在CGContext下,可以创建一个Path,这个Path由用户自己定义图形的样子。在CALayer的常用方法中,有cornerRadius属性,定义了一个矩形的圆角模式,但是同时影响了4个交,在path中,我门当然可以画出一个不是四个角都是圆角的矩形,比如下面这个例子

CGRect rect = CGRectMake(50, 50, 100, 100);     CGSize radii = CGSizeMake(15, 5);     UIRectCorner corners = UIRectCornerTopRight | UIRectCornerBottomRight | UIRectCornerBottomLeft;      UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect                                                byRoundingCorners:corners                                                      cornerRadii:radii];      CAShapeLayer *shapeLayer = [CAShapeLayer layer];     shapeLayer.strokeColor = [UIColor redColor].CGColor;     shapeLayer.fillColor = [UIColor clearColor].CGColor;     shapeLayer.lineWidth = 5;     shapeLayer.lineJoin = kCALineJoinRound;     shapeLayer.lineCap = kCALineCapRound;     shapeLayer.path = path.CGPath;      [self.view.layer addSublayer:shapeLayer];

这段代码,我们画了一个只有三个圆角的矩形,另外,定义strokeColor,fillColor,lineWidth这些操作都方便了很多,但有一点要注意,这些属性一旦定义,则在这个layer上的所以操作都将使用这个属性,如果你想使用不同的属性,比如线条颜色这些,那你只有使用一个新的CAShapeLayer了。

画出来的图形效果如下

CAShapeLayer

当然,这个CAShapeLayer也可以当做maskLayer来使用,在文章 http://shellcodes.sinaapp.com/?p=526 中可以看到用法,这样就可以制作出符合自己风格的图片显示效果

原文  https://shellcodes.sinaapp.com/articles/532
正文到此结束
Loading...