博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios圆角图片的实现
阅读量:6116 次
发布时间:2019-06-21

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

hot3.png

图片做圆角是非常常见的,一般用做用户头像什么,ios中怎么实现呢:

1.layer层修改

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"huabianwl003"]];imageView.center = self.view.center;[self.view addSubview:imageView];[imageView.layer setCornerRadius:imageView.frame.size.width/2];[imageView.layer setMasksToBounds:YES];

140946_oGxR_1463495.png

这里注意一点,使用了cornerRaius后,shadow投影就无效果了,怎么样能又是圆角又有投影呢,做两层吧!

这个方式是ios开发中最常用的,方便简单,但是开销的性能比较大,尤其在tableView中重用的cell里面使用。具体消耗可以看看这篇文章:

2.重绘图片

- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.        UIImage *image = [UIImage imageNamed:@"huabianwl003"];    image = [self cutImage:image WithRadius:image.size.width/2];    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];    imageView.center = self.view.center;    [self.view addSubview:imageView];}//图片剪切- (UIImage*)cutImage:(UIImage *)orImage WithRadius:(int)radius{    UIGraphicsBeginImageContext(orImage.size);    CGContextRef gc = UIGraphicsGetCurrentContext();        float x1 = 0.;    float y1 = 0.;    float x2 = x1+orImage.size.width;    float y2 = y1;    float x3 = x2;    float y3 = y1+orImage.size.height;    float x4 = x1;    float y4 = y3;        CGContextMoveToPoint(gc, x1, y1+radius);    CGContextAddArcToPoint(gc, x1, y1, x1+radius, y1, radius);    CGContextAddArcToPoint(gc, x2, y2, x2, y2+radius, radius);    CGContextAddArcToPoint(gc, x3, y3, x3-radius, y3, radius);    CGContextAddArcToPoint(gc, x4, y4, x4, y4-radius, radius);            CGContextClosePath(gc);    CGContextClip(gc);        CGContextTranslateCTM(gc, 0, orImage.size.height);    CGContextScaleCTM(gc, 1, -1);    CGContextDrawImage(gc, CGRectMake(0, 0, orImage.size.width, orImage.size.height), orImage.CGImage);                UIImage *newimage = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();        return newimage;}

重绘图片也是比较耗性能的,具体和第一个方法比怎么样呢,我到是没有比较过,不敢乱说。但是至少可以解决tableView在重用cell时,不断重设layer的问题,因为你可以把重绘好的图片保存在内存中替换掉原来的图片。

3.图片覆盖

怎么说呢,比较low也是比较好的办法,就是在图片上加上一个局部透明的imageView,代码我就不展示了,就是需要UI提供一张中间扣圆的图片。

转载于:https://my.oschina.net/iq19900204/blog/489076

你可能感兴趣的文章
实验二 Java面向对象程序设计
查看>>
------__________________________9余数定理-__________ 1163______________
查看>>
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
Content Provider的权限
查看>>
416. Partition Equal Subset Sum
查看>>
centos7.0 64位系统安装 nginx
查看>>
数据库运维平台~自动化上线审核需求
查看>>
注解开发
查看>>
如何用 Robotframework 来编写优秀的测试用例
查看>>
Django之FBV与CBV
查看>>
Vue之项目搭建
查看>>
app内部H5测试点总结
查看>>
Docker - 创建支持SSH服务的容器镜像
查看>>
[TC13761]Mutalisk
查看>>
三级菜单
查看>>