iOS视图切割圆角
iOS切圆角的方式有三种
1. 通过设置layer的属性
最简单的一种,但是很影响性能,一般在正常的开发中使用很少.
self.button.layer.cornerRadius = 30;
self.button.layer.masksToBounds = YES;
2.使用贝塞尔曲线UIBezierPath和Core Graphics 使用不多 貌似只能使用ImageView 这个不太懂
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
imageView.center = self.view.center;
imageView.image = [UIImage imageNamed:@"1"];
//开始对imageView进行画图
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, [UIScreen mainScreen].scale);
//使用贝塞尔曲线画出一个圆形图
[[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.frame.size.width] addClip];
[imageView drawRect:imageView.bounds];
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
[self.button setImage:image forState:UIControlStateNormal];
//结束画图
UIGraphicsEndImageContext();
[self.view addSubview:imageView];
3.使用CAShapeLayer和UIBezierPath设置圆角
// 只切一个角
// UIBezierPath *maskPAth = [UIBezierPath bezierPathWithRoundedRect:self.button.bounds byRoundingCorners:UIRectCornerTopLeft cornerRadii:self.button.bounds.size];
// 只切两个角
// UIBezierPath *maskPAth = [UIBezierPath bezierPathWithRoundedRect:self.button.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(10, 10)];
// 注意 当size是整个大小时 切角是对角线会切成圆 size不是整个视图大小不会成圆角 有人说必须导入<AVFoundation/AVFoundation.h> 我是没有发现 如果不行可以导入试试
// UIBezierPath *maskPAth = [UIBezierPath bezierPathWithRoundedRect:self.button.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomRight cornerRadii:self.button.bounds.size];
// UIBezierPath *maskPAth = [UIBezierPath bezierPathWithRoundedRect:self.button.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
// 三个角
// UIBezierPath *maskPAth = [UIBezierPath bezierPathWithRoundedRect:self.button.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomRight | UIRectCornerTopRight cornerRadii:CGSizeMake(30, 30)];
// 四个角
// UIBezierPath *maskPAth = [UIBezierPath bezierPathWithRoundedRect:self.button.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:self.button.bounds.size];
// UIBezierPath *maskPAth = [UIBezierPath bezierPathWithRoundedRect:self.button.bounds cornerRadius:10];
// CAShapeLayer *caShapeLayer = [CAShapeLayer layer];
// caShapeLayer.path = maskPAth.CGPath;
// self.button.layer.mask = caShapeLayer;
这三种方法中第三种最好,对内存的消耗最少啊,而且渲染快速。
注意:这三种方法都是显示的是圆角,并不是真实切除角,在debug view hierarchy上可以看出大小不变 显示改变
iOS视图切割圆角的更多相关文章
- iOS - 指定视图的圆角个数-b
平常设置视图的圆角最普遍的就是设置四个角的,方法也就是一句代码解决: view.layer.cornerRadius = 10; 四个圆角 但有时需求会是指定某个,或者特定哪几个角设置圆角,所以我们需 ...
- iOS 切割圆角图片、图片文件格式判断
1.切割圆角图片 // 性能不好,适合圆角图形数量比较少的情况 UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMak ...
- 从iOS的图片圆角想到渲染
圆角是一种很常见的视图效果,相比于直角,它更加柔和优美,易于接受.设置圆角会带来一定的性能损耗,如何提高性能是一个需要重点讨论的话题. 大家常见的圆角代码x.layer.cornerRadius = ...
- [iOS]UIImageView增加圆角
[iOS]UIImageView增加圆角 "如何给一个UIImageView增加圆角?有几种方法?各自区别?" 备注:本文参考自http://www.jianshu.com/p/d ...
- iOS 高效添加圆角效果实战讲解
圆角(RounderCorner)是一种很常见的视图效果,相比于直角,它更加柔和优美,易于接受.但很多人并不清楚如何设置圆角的正确方式和原理.设置圆角会带来一定的性能损耗,如何提高性能是另一个需要重点 ...
- iOS - 视图与手势(UIview & UIGestureRecognizer)
01 UIView视图的基本使用 --- 在根视图中添加2个UIView视图 //视图确实加载时调用 - (void)viewDidLoad { [super viewDidLoad]; // Do ...
- iOS开发-添加圆角效果高效实现
圆角(RounderCorner)是一种很常见的视图效果,相比于直角,它更加柔和优美,易于接受.但很多人并不清楚如何设置圆角的正确方式和原理.设置圆角会带来一定的性能损耗,如何提高性能是另一个需要重点 ...
- iOS 视图控制器转场详解
iOS 视图控制器转场详解 前言的前言 唐巧前辈在微信公众号「iOSDevTips」以及其博客上推送了我的文章后,我的 Github 各项指标有了大幅度的增长,多谢唐巧前辈的推荐.有些人问我相关的问题 ...
- iOS视图控制器的生命周期
今天面试有一道面试题因为回答不好,因为也不经常涉及所以有点模糊,我选择了最保守的回答,没有展开写出我对这个问题的理解. 问题:IOS 开发 loadView 和 viewDidLoad 的区别? 经过 ...
- iOS视图控制对象生命周期
iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...
随机推荐
- 支付宝小程序textarea字数统计踩坑
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,公司项目就是发布多端的项目,所以主推的是uni-ap ...
- Elastic学习之旅 (1) 初识ElasticSearch
大家好,我是Edison. 最近需要用到ElasticSearch,于是想要系统学习了解下,于是这就开始啦. 什么是ElasticSearch? ElasticSearch是一款开源的分布式搜索分析引 ...
- 从“有”到“优”:iPaaS 赋能企业 API 服务治理建设
在企业发展的过程中,企业引入了不同的业务系统,CRM.WMS.OMS以及OA.ERP等内部协同系统,API接口数量呈指数级增长,接口越来越多,企业难免会遇到各种问题,那么,API接口如何从" ...
- Maui 实践:不要把 DataPackagePropertySetView 看作一层皮
-- 再论为控件动态扩展 DragDrop 能力 夏群林 原创 2025.7.18 一.Drag / Drop 之间传递的参数 前文提到,拖放的实现需要 DragGestureRecognizer 与 ...
- Docker常用命令大全--九五小庞
Docker常用命令大全,请看菜鸟教程 Docker 命令大全 | 菜鸟教程 (runoob.com)
- 自定义.sh 文件在linux 中开机自启设置-九五小庞
有时候呢我们需要在centos系统启动的时候运行程序,这样保证一些服务就没有中断,相信你理解是什么意思.其实方法很简单呐,就是把需要运行的程序放在/etc/rc.d/rc.local里面就可以启动了除 ...
- Win10正式版玩老游戏不兼容如何设置的问题
有一位雨林木风系统的小伙伴,说他用的win10正式版系统电脑根本不支持运行老游戏了.有些单机游戏完全就不能玩了.其实,不能运行的主要原因就是电脑的兼容性问题,接下来,win10专业版小编就来分享设置兼 ...
- Win10专业版电脑如何创建本地账户的问题
有电脑系统用户,说他用的电脑win10专业版系统,要如何才能创建一个本地账户来使用呢?下面,电脑技术员小编就来详细的介绍一下具体的操作方法吧! 在 Windows 10 中创建本地账户可以按照以下步骤 ...
- Win11系统电脑如何取消登录密码的问题
很多电脑基地的用户升级win11系统,但是电脑设置了密码之后,每次开机需要输入密码才能进入桌面.其实,我们设置密码是为了防止陌生人开机就可以进入桌面,但是自己每次进入桌面也要输入密码就很麻烦,下面技术 ...
- [AGC066C] Delete AAB or BAA
\(\mathbf{Part.-1}\) 给定一个由字符 A 和 B 组成的字符串 \(S\) . 在这根绳子上,您可以反复执行以下操作: 在字符串 \(S\) 中选择三个连续且相等的字符,这些字符要 ...