博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 绘制圆角
阅读量:6500 次
发布时间:2019-06-24

本文共 2390 字,大约阅读时间需要 7 分钟。

级别: ★☆☆☆☆

标签:「iOS切圆角」「layer圆角」「CAShapeLayer圆角」
作者:
审校:

项目中会常有圆角(或圆形)显示视图的需求(比如用户头像的显示),也会有部分圆角显示视图的需求(比如从屏幕底层弹起的浮层,只有左上角和右上角为圆角)。 这里有一张方形的图片,用UIImageView承载,如下图:

一、对视图绘制4个圆角

我们可以通过CALayercornerRadius属性绘制圆角,以达到如下效果:

代码如下:

// 初始化imageView1UIImageView *imageView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"qr_qishare"]];imageView1.center = CGPointMake(self.view.bounds.size.width / 2, imageView1.bounds.size.height);imageView1.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;[self.view addSubview:imageView1];// 设置layer超出父图层的部分剪切掉imageView1.layer.masksToBounds = YES;// 设置圆角半径,若imageView1为正方形,设置圆角半径为边长的一半可实现圆效果imageView1.layer.cornerRadius = 20.0;// 设置的描边宽度// imageView1.layer.borderWidth = 10.0;// 设置的描边颜色// imageView1.layer.borderColor = [UIColor darkGrayColor].CGColor;复制代码
二、指定视图的角绘制圆角

我们可以通过UIBezierPathCAShapeLayer来绘制圆角,以达到如下效果:

代码如下:

// 初始化imageView2UIImageView *imageView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"qr_qishare"]];imageView2.center = CGPointMake(self.view.bounds.size.width / 2, imageView2.bounds.size.height * 2 + 30.0);imageView2.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;[self.view addSubview:imageView2];    // 创建贝塞尔曲线,指定绘制区域、角和角半径UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:imageView2.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:(CGSize){20.0}];// 绘制4个角,指定角半径// bezierPath = [UIBezierPath bezierPathWithRoundedRect:imageView2.bounds cornerRadius:20.0];// 绘制圆// bezierPath = [UIBezierPath bezierPathWithOvalInRect:imageView2.bounds];// 初始化shapeLayerCAShapeLayer *shapeLayer = [CAShapeLayer layer];// 设置绘制路径shapeLayer.path = bezierPath.CGPath;// 将shapeLayer设置为imageView2的layer的mask(遮罩)imageView2.layer.mask = shapeLayer;复制代码

以上两种绘制圆角的方法都是基于UIViewCALayer(默认读者已了解UIView和CALayer),因为作者的项目中有多处绘制圆角的需求,便对UIView封装了一个类别UIView+QiCornerCliper

使用方式如下:

// 初始化imageView3UIImageView *imageView3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"qr_qishare"]];imageView3.center = CGPointMake(self.view.bounds.size.width / 2, imageView3.bounds.size.height * 2 + 30.0);imageView3.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;[self.view addSubview:imageView3];    // 使用封装的方法绘制圆角[imageView3 qi_clipCorners:UIRectCornerTopLeft radius:20.0 border:5.0 color:[UIColor redColor]];复制代码

实现效果如下:

UIView+QiCornerCliper源码可从工程中获取。

关注我们的途径有:

QiShare(微信公众号)

推荐文章:

转载地址:http://kutyo.baihongyu.com/

你可能感兴趣的文章
排序(一)归并、快排、优先队列等(图文具体解释)
查看>>
spark- PySparkSQL之PySpark解析Json集合数据
查看>>
DEDECMS教程:上/下一篇文章标题长度的截取方法
查看>>
文件操作示例脚本 tcl
查看>>
大家好,新年快乐。
查看>>
prototype
查看>>
【SQL Server】系统学习之一:表表达式
查看>>
Docker容器入门-基本命令的使用
查看>>
2015湖南省省赛 阶乘除法 暴力
查看>>
SuSE下VNCVIEWER没有出现界面,只有shell窗口的问题
查看>>
软件工程实践2017 个人技术博客
查看>>
poj(2325)线段树
查看>>
Android学习路线
查看>>
Linux下的redis的持久化,主从同步及哨兵
查看>>
在相同的主机上创建一个duplicate数据库
查看>>
Date15
查看>>
从Date类型转为中文字符串
查看>>
bzoj1251: 序列终结者 (splay)
查看>>
rr与hr_RR、AR、OR和HR
查看>>
感情沟通出了问题要怎么解决_当感情出现问题怎么沟通 相处更融洽
查看>>