圖片圓角設(shè)置

方案一:切l(wèi)ayer#

直接設(shè)置該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();

用上面的幾行代碼就可以實現(xiàn)圖片切圓角了,但是,為了擴展性著想,我們應(yīng)當將這些代碼進行封裝。封裝的這個方法我們希望:只需傳入圖片名(imgName)就返回已經(jīng)切好圓角的圖片(UIImage)。
可以新建一個UIImage的分類,在里面封裝該實現(xiàn)。
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];
}

調(diào)用:

// 圖片圓角

#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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容