iOS小知识点05

作者: 丨n水瓶座菜虫灬 | 来源:发表于2016-05-07 16:46 被阅读607次

    UIImageView添加圆角

    在项目中提供的图片是矩形的,现要改成圆角图片,于是找了一些资料,下面是添加圆角图片的方法
    创建UIImage的分类UIImage+ImageRounderCorner
    UIImage+ImageRounderCorner.h文件中

    #import <UIKit/UIKit.h>
    
    @interface UIImage (ImageRounderCorner)
    
    /** 调用此方法,返回一个带有圆角的UIImage对象
     *  参数一:圆角半径
     *  参数二:图片的大小
     */
    - (UIImage *)imageAddCornerWithRadius:(CGFloat)radius andSize:(CGSize)size;
    
    @end
    

    UIImage+ImageRounderCorner.m文件中

    #import "UIImage+ImageRounderCorner.h"
    
    @implementation UIImage (ImageRounderCorner)
    
    - (UIImage *)imageAddCornerWithRadius:(CGFloat)radius andSize:(CGSize)size {
    
        CGRect rect = CGRectMake(0, 0, size.width, size.height);
    // 创建一个基于位图的上下文(context),并将其设置为当前上下文,size为新创建的位图上下文大小
        // opaque 透明开关 // scale 缩放因子
        UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
        // 拿到当前上下文对象
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        // 创建贝塞尔曲线
        UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(radius, radius)];
        // 添加路径
        CGContextAddPath(ctx, path.CGPath);
        // 裁剪
        CGContextClip(ctx);
        // 绘图
        [self drawInRect:rect];
        // 填充绘制
        CGContextDrawPath(ctx, kCGPathFillStroke);
        // 从当前位图上下文的内容输出一个UIImage图片
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        // 上下文栈pop出创建的context
        UIGraphicsEndImageContext();
    
        return newImage;
    }
    
    @end
    

    使用:
    在控制器中导入 #import "UIImage+ImageRounderCorner.h"

    - (void)viewDidLoad {
        [super viewDidLoad];
        UIImage *image = [UIImage imageNamed:@"image"];
        UIImage *cornerImage = [image imageAddCornerWithRadius: 50.0 andSize:CGSizeMake(50.0, 50.0)];
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 50, 50)];
        [self.view addSubview:imageView];
    }
    

    运行后,发现,将原有的矩形图片转换为了带圆角的图片。

    相关文章

      网友评论

      • 大志_lxl: [self drawInRect:rect]; 这个方法是自己写的? 系统没调出来啊
        大志_lxl:@丨n水瓶座菜虫灬 哦哦 谢谢 我用imageView调的 搞错了哈
        丨n水瓶座菜虫灬:@大志_lxl drawInRect是系统UIImage的方法,UIImage的分类是可以调用UIImage的方法的。
      • 马铃薯蜀黍:self.view.layer.cornerRadius = 5;
        self.view.layer.masksToBounds = YES;
        简单粗暴 :underage:
        马铃薯蜀黍:@丨n水瓶座菜虫灬 不过这种会有离屏绘制问题,而离屏绘制就会给性能带来负面影响,所以还是你写的绘图方式比较好
        丨n水瓶座菜虫灬:@马铃薯蜀黍 谢谢,刚试了一下imageView,果然可以,受教了!

      本文标题:iOS小知识点05

      本文链接:https://www.haomeiwen.com/subject/yzxsrttx.html