最简单方式设置图片圆角—CAShapeLayer

Layer

  • layer.masksToBounds=YES; // 切掉超出的部分

CAShapeLayer

  • 需要形状才能生效
  • 主要是图形,设置颜色…没什么意义
  • 需要和贝塞尔曲线配合使用才有意

UIBezierPath

  • 是对CGPathRef的封装,创建矢量路径
  • 给CAShapeLayer提供路径,CAShapeLayer渲染路径中进行,形成闭环
    • 即使曲线不是首尾相接的闭环,也会渲染成闭环

Layer.mask

  • 接收一个layer
    • 设置颜色、边框没意义
    • 有边框、形状即可
  • 和addSubLayer有区别,只要模子里面的内容,不是添加一块上去
CAShapeLayer和drawRect的比较
1.drawRect:属于CoreGraphics框架,占用CPU消耗大 
2.CAShapeLayer:属于CoreAnimation,通过GPU来渲染图形,节省性能。动画渲染直接提交给手机GPU,不消耗内存
- (void)layoutSubviews
{
    [super layoutSubviews];
    // 圆角矩形 背景
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.yellowView.bounds byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(10.0, 10.0)];
    CAShapeLayer *layer = [[CAShapeLayer alloc] init];
    layer.frame = self.yellowView.bounds;
    layer.path = path.CGPath;
}
  • 遇到一个bug:cell用xib创建,在awakeFromNib中设置圆角,结果cell的高度固定,不是表格宽度!
    • 必须加到layoutSubviews


参考资料

  • iOS:Layer.mask属性用法
  • UIBezierPath详解
  • 设置UIView圆角的拓展—圆角矩形
    • 使用cornerRadius设置图片圆角
  • Why is cornerRadii parameter of CGSize type in -UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:?
  • CAShapeLayer原始用法——贝塞尔曲线在项目中的实际运用:描三边

你可能感兴趣的:(最简单方式设置图片圆角—CAShapeLayer)