iOS 给UI视图设置部分圆角(OC/Swift)

有时候,我们在项目中会有这样的需求,一个button或者label只要切左边两个角的圆角或者只要一个角的圆角,比如下图

这个时候,系统单纯的layer.cornerRadius的需求就不能满足我们,我们就需要通过图层蒙版来帮助我们。

OC版

CGRect rect = cornerView.bounds;
CGSize radio = CGSizeMake(10, 10);//圆角尺寸
UIRectCorner corner = UIRectCornerBottomLeft | UIRectCornerBottomRight;//这只圆角位置
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corner cornerRadii:radio];
CAShapeLayer *masklayer = [[CAShapeLayer alloc]init];//创建shapelayer
masklayer.frame = cornerView.bounds;
masklayer.path = path.CGPath;//设置路径
cornerView.layer.mask = masklayer;

Swift版

let rect = cornerView.bounds 
let radio = CGSize(width: 30, height: 30) // 圆角尺寸
let corner = UInt8(UIRectCorner.topLeft.rawValue) | UInt8(UIRectCorner.topRight.rawValue) // 这只圆角位置
let path = UIBezierPath(roundedRect: rect, byRoundingCorners: UIRectCorner(rawValue: UIRectCorner.RawValue(corner)), cornerRadii: radio)
let masklayer = CAShapeLayer() // 创建shapelayer
masklayer.frame = cornerView.bounds
masklayer.path = path.cgPath // 设置路径
cornerView.layer.mask = masklayer

完整版demo:点我

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Core Animation其实是一个令人误解的命名。你可能认为它只是用来做动画的,但实际上它是从一个叫做Laye...
    小猫仔阅读 3,836评论 1 4
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,599评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,157评论 5 13
  • >嗯,圆和椭圆还不错,但如果是带圆角的矩形呢? >我们现在能做到那样了么? >史蒂芬·乔布斯 我们在第三章『图层几...
    夜空下最亮的亮点阅读 726评论 0 0
  • (转载) 老君曰:大道无形,生育天地;大道无情,运行日月;大道无名,长养万物;吾不知其名,强名曰道。夫道者:有清有...
    123护手霜阅读 370评论 0 1