使用CAShapeLayer和UIBezierPath设置圆角
1
2
3
4
5
6
7
8
9
10
|
UIImageView *
imageView
=
[
[
UIImageView
alloc
]
initWithFrame
:
CGRectMake
(
100
,
100
,
100
,
100
)
]
;
imageView
.
image
=
[
UIImage
imageNamed
:
@
"myImg"
]
;
UIBezierPath *
maskPath
=
[
UIBezierPath
bezierPathWithRoundedRect
:
imageView
.
bounds
byRoundingCorners
:
UIRectCornerAllCorners
cornerRadii
:
imageView
.
bounds
.
size
]
;
CAShapeLayer *
maskLayer
=
[
[
CAShapeLayer
alloc
]
init
]
;
//设置大小
maskLayer
.
frame
=
imageView
.
bounds
;
//设置图形样子
maskLayer
.
path
=
maskPath
.
CGPath
;
imageView
.
layer
.
mask
=
maskLayer
;
[
self
.
view
addSubview
:
imageView
]
;
|
对于方案2需要解释的是:
- CAShapeLayer继承于CALayer,可以使用CALayer的所有属性值;
- CAShapeLayer需要贝塞尔曲线配合使用才有意义(也就是说才有效果)
- 使用CAShapeLayer(属于CoreAnimation)与贝塞尔曲线可以实现不在view的drawRect(继承于CoreGraphics走的是CPU,消耗的性能较大)方法中画出一些想要的图形
- CAShapeLayer动画渲染直接提交到手机的GPU当中,相较于view的drawRect方法使用CPU渲染而言,其效率极高,能大大优化内存使用情况。
总的来说就是用CAShapeLayer的内存消耗少,渲染速度快