iOS 在不使用cornerRadius的情况下,设置图像为圆角

在OC中,裁减图像为圆角,在CALayer中有两个很重要的属性,是会经常被连带一起调用的,(cornerRadius &masksToBounds)

如以下代码:

    // 创建 UIImageView --> iconView
    UIImageView *iconView = [[UIImageView alloc]initWithFrame:CGRectMake(37, 150, 300, 300)];
    // 设置图片
    iconView.image = [UIImage imageNamed:@"photo"];
    // 添加到视图view
    [self.view addSubview:iconView];
    
    iconView.layer.cornerRadius = 150;
    iconView.layer.masksToBounds = YES;

这样设置是可以立马将想要的图片裁切为圆角,但是cornerRadius是在主线程时时渲染的,性能非常糟糕,除非在设置一张图片的时候使用,所以不建议使用。

而我接下来要推荐的一种设置方式,是使用路径裁切的方式--> UIBezierPath,实例代码如下:

    // 创建 UIImageView --> iconView
    UIImageView *iconView = [[UIImageView alloc]initWithFrame:CGRectMake(37, 150, 300, 300)];
    // 设置图片
    iconView.image = [UIImage imageNamed:@"photo"];
    // 添加到视图view
    [self.view addSubview:iconView];
    
    // 开启上下文
    UIGraphicsBeginImageContextWithOptions(iconView.image.size, NO, 0.0);
    
    // 获取绘制圆的半径、宽、高 的一个区域
    CGFloat radius = MIN(iconView.image.size.width, iconView.image.size.height) * 0.5;
    CGFloat width = radius * 2;
    CGFloat height = width;
    CGRect rect = CGRectMake(0, 0, width, height);
    
    // 使用 UIBezierPath 路径裁切,注意:先设置裁切路径,再绘制图像
    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithOvalInRect:rect];
    
    // 添加到裁切路径
    [bezierPath addClip];
    
    // 将图片绘制到裁切好的区域内
    [iconView.image drawInRect:rect];
    
    // 从上下文获取当前绘制成圆形的图片
    UIImage *resImage = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭上下文
    UIGraphicsEndImageContext();
    
    // 赋值给 iconView.image
    iconView.image = resImage;


这样就绘制出了圆角图像了。以上内容分享给大家,欢迎指导补充!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值