iOS设置圆角图片的方法及对比
2016-03-31 23:59
393 查看
一、我们最常用的方法是:
这样设置会出发离屏渲染,比较消耗性能,如果一个界面上有多个view这样设置圆角,就会出现明显卡顿(png的图片在iOS9.0之后不会离屏渲染)。
设置圆角后,shouldRasterize=YES光栅化,例如:
二、直接覆盖一张中间为圆形透明的图片
三、UIImage
drawInRect绘制圆角
四、SDWebImage处理图片时Core Graphics绘制圆角
总结:建议使用第二种方法,本人水平有限,欢迎纠错指正。
[view.layer setCornerRadius:10];
这样设置会出发离屏渲染,比较消耗性能,如果一个界面上有多个view这样设置圆角,就会出现明显卡顿(png的图片在iOS9.0之后不会离屏渲染)。
设置圆角后,shouldRasterize=YES光栅化,例如:
imageView.clipsToBounds = YES; [imageView.layer setCornerRadius:50]; imageView.layer.shouldRasterize = YES; imageViewUrl.layer.rasterizationScale=[UIScreen mainScreen].scale; //UIImageView不加这句会产生一点模糊 shouldRasterize=YES设置光栅化,可以使离屏渲染的结果缓存到内存中存为位图, 使用的时候直接使用缓存,节省了一直离屏渲染损耗的性能。 但是如果layer及sublayers常常改变的话,它就会一直不停的渲染及删除缓存重新 创建缓存,所以这种情况下建议不要使用光栅化,这样也是比较损耗性能的。
二、直接覆盖一张中间为圆形透明的图片
这种方法GPU计算多层的混合渲染blending也是会消耗一点性能的,但比第一种方法还是好上很多的。
三、UIImage
drawInRect绘制圆角
这种方式GPU损耗低内存占用大,而且UIButton上不知道怎么绘制,可以用 UIimageView添加个点击手势当做UIButton使用。 UIGraphicsBeginImageContextWithOptions(avatarImageView.bounds.size, NO, [UIScreen mainScreen].scale); [[UIBezierPath bezierPathWithRoundedRect:avatarImageView.bounds cornerRadius:50] addClip]; [image drawInRect:avatarImageView.bounds]; avatarImageView.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
四、SDWebImage处理图片时Core Graphics绘制圆角
//UIImage绘制为圆角 int w = imageSize.width; int h = imageSize.height; int radius = imageSize.width/2; UIImage *img = image; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst); CGRect rect = CGRectMake(0, 0, w, h); CGContextBeginPath(context); addRoundedRectToPath(context, rect, radius, radius); CGContextClosePath(context); CGContextClip(context); CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage); CGImageRef imageMasked = CGBitmapContextCreateImage(context); img = [UIImage imageWithCGImage:imageMasked]; CGContextRelease(context); CGColorSpaceRelease(colorSpace); CGImageRelease(imageMasked);
总结:建议使用第二种方法,本人水平有限,欢迎纠错指正。
相关文章推荐
- iOS的JS和OC代码互相调用
- IOS学习 GCD 延时执行三种方法 并行/串行/主队列综合练习 队列组 shift+command+o快速查找
- OC阅读笔记八:分类(上)
- iOS常用设计模式
- 浅谈ios block(1)
- iOS iOS9.0 的CoreLocation定位
- ios学习小结
- ios-完成任务状态栏弹出提示view的小框架设计
- iOS 五种传值方式
- IOS开发探索(一):CocoalPods相关
- iOS-MJRefresh
- ios null
- iOS快速定位问题
- ubuntu 14.04 nagios4+ndoutils2.0+centreon2.5.4配置
- centreon+nagios安装配置操作手册(2)——配置监控服务
- iOS开发五种触屏事件的处理
- centreon+nagios安装配置操作手册(1)——环境搭建
- 2016最新一元云购完整源码 云购CMS系统 带安卓和ios手机客户端 源码免费分享
- iOS国际化问题_点加号没有反应
- IOS 3-31 知识点