iOS中让控件显示圆形图片

本文一共提供三种控件显示圆形图片的方法,针对不同的使用场景,请自行选择合适的方法。

方法一:

1.1拿到图片UIImage *image;

1.2开启一个图形上下文 设置图形上下文的siz 等于图片size;

UIGraphicsBeginImageContext(image.size);

1.3利用贝塞尔曲线,设置一个圆形裁剪区域(设置一个矩形的内切圆/内切椭圆);

UIBezierPath *path =[UIBezierPath bezierPathWithOvalInRect:CGRectMake( 0, 0, image.size.width, image.size.height)];

1.4拿到贝塞尔曲线对象 添加裁剪;

[path addClip];

1.5将图片画到图像上下文上
由于图像上下文size和图片的size设置一样 所以可以设置point为零点;

[image drawAtPoint:CGPointZero];

1.6从当前的图像上下文中获取图片;

image = UIGraphicsGetImageFromCurrentImageContext();

1.7虽然此时已经拿到 裁剪变为圆形的图片image,但是千万不要忘了最后还有重要的一个步骤,那就是关闭图形上下文,这个步骤特别容易让人忘记,切记!

UIGraphicsEndImageContext();

简单的几个步骤就完成了一个正圆形图片的裁剪功能,当然还有我们更加简单的方式哦,那就是接下来的方法二。

方法二:

2.1拿到你要设置的UIImageView *imageV;
2.2设置imageV 的layer层的圆角半径;
2.3拿到imageV的layer层,并且告诉layer将位于它之下的layer都遮盖住;
两个步骤解决,简单明了,但是此方法会带来一定的性能问题。
即:会触发离屏渲染,比较消耗性能。比如当一个页面上有十几头像这样设置了圆角,那么会明显感觉到卡顿。
注意:png图片UIImageView处理圆角是不会产生离屏渲染的。(ios9.0之后不会离屏渲染,ios9.0之前还是会离屏渲染)。
代码如下:

 imageV.layer.cornerRadius = self.iconImageV.tml_width *0.5;
 imageV.layer.masksToBounds =YES;

当然,如果你一行代码也不写 也想设置圆角也是可以的,那就是我么接下来的第三种方法。

方法三:

如果你是在xib中添加的UIImageView的话,这里还提供另外一种不需要编写一行代码的方法,详细请参照如下图片中指示:

第一个属性:layer.cornerRadius

第二个属性:layer.masksToBounds

第一步:

Snip20161020_1.png

第二步:

Snip20161020_4.png

总结:

以上三种方法都可以达到同样的效果,具体选择哪一种,视情况而定!
此外,第三中方法中涉及运行时方面的知识,具体原理就不在此做过多解释。同时也是三种方法中最为装B的方法,温馨提示:装B虽好,但要慎用!

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

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,551评论 6 30
  • 每个UIView有一个伙伴称为layer,一个CALayer。UIView实际上并没有把自己画到屏幕上;它绘制本身...
    shenzhenboy阅读 3,143评论 0 17
  • 转载:http://www.jianshu.com/p/32fcadd12108 每个UIView有一个伙伴称为l...
    F麦子阅读 6,289评论 0 13
  • 1.xcode5和xcode7区别 1.xcode7没有Frameworks文件夹,xcode7内部会自动帮你导入...
    彼岸的黑色曼陀罗阅读 526评论 0 2
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,141评论 5 13