iOSiOS干货iOS开发记录

图片圆角设置

2015-12-10  本文已影响671人  Wang66

方案一:切layer#

直接设置该UIImageView的layer的cornerRadius属性(半径)为UIImageView宽度的一半。

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    _imgView.image = [UIImage imageNamed:@"1.jpg"];
    _imgView.layer.cornerRadius = _imgView.frame.size.width*0.5;
    _imgView.layer.masksToBounds = YES; // 超出部分裁剪掉
} 

这种方式非常简单,但是性能不太好,当有很多图片被切为圆角后,在上下滚动的时候有些卡顿。

方案二:用Core Graphics在圆形上绘制一张图片,并把超出部分才剪掉

    // 开启图形上下文
    UIGraphicsBeginImageContext(self.size);
    
    // 获得上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    // 矩形框
    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
    
    // 画一个圆
    CGContextAddEllipseInRect(context, rect);
    
    // 按上面图形裁剪多余部分
    CGContextClip(context);
    
    // 将image绘制到刚才的圆形上
    UIImage *image = [UIImage imageNamed:@"1.jpg"];
    [image drawInRect:rect];
    
    // 获得上下文的图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();

用上面的几行代码就可以实现图片切圆角了,但是,为了扩展性着想,我们应当将这些代码进行封装。封装的这个方法我们希望:只需传入图片名(imgName)就返回已经切好圆角的图片(UIImage)。
可以新建一个UIImage的分类,在里面封装该实现。
UIImage

UIImage+CycleImage.h

#import <UIKit/UIKit.h>

@interface UIImage (CycleImage)


- (UIImage *)cycleImage;


+ (UIImage *)cycleImageNamed:(NSString *)imgName;


@end

UIImage+CycleImage.m

#import "UIImage+CycleImage.h"

@implementation UIImage (CycleImage)

- (UIImage *)cycleImage
{
    // 开启图形上下文
    UIGraphicsBeginImageContext(self.size);
    
    // 获得上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    // 矩形框
    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
    
    // 画一个圆
    CGContextAddEllipseInRect(context, rect);
    
    // 裁剪成上面画的图形形状
    CGContextClip(context);
    
    // 将image绘制到刚才的圆形上
//  UIImage *image = [UIImage imageNamed:@"1.jpg"];
//  [image drawInRect:rect];
    [self drawInRect:rect];
    
    // 获得上下文的图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    
    return newImage;
}


+ (UIImage *)cycleImageNamed:(NSString *)imgName
{
    return [[UIImage imageNamed:imgName] cycleImage];
}

调用:

// 图片圆角

#import "MyViewController.h"
#import "UIImage+CycleImage.h"

@interface MyViewController ()

@end

@implementation MyViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    _imgView.image = [UIImage cycleImageNamed:@"1.jpg"]; // 类方法
//  _imgView.image = [[UIImage imageNamed:@"1.jpg"] cycleImage];  // 对象方法
}


@end
上一篇下一篇

猜你喜欢

热点阅读