首先聲明一個(gè)UIImageView
@property (nonatomic, strong) UIImageView *cycleImv;
方法一:
self.cycleImv= [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 50, 50)];
[self.view addSubview:self.cycleImv];
// 為圖片切圓
self.cycleImv.layer.masksToBounds = YES;
self.cycleImv.layer.cornerRadius = self.cycleImv.frame.size.width / 2.0;
// 為圖片添加邊框,根據(jù)需要設(shè)置邊框
self.cycleImv.layer.borderWidth = 2.0;//邊框的寬度
self.cycleImv.layer.borderColor = [UIColor redColor].CGColor;//邊框的顏色
方法二:
- (void)drawRect:(CGRect)rect
{
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.cycleImv.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:self.cycleImv.bounds.size];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
//設(shè)置大小
maskLayer.frame = self.cycleImv.bounds;
//設(shè)置圖形樣子
maskLayer.path = maskPath.CGPath;
self.cycleImv.layer.mask = maskLayer;
}
方法三:
將網(wǎng)絡(luò)圖片裁剪為圓形,首先建立一個(gè)UIImage分類UIImage+Extension,一個(gè)UIImageView分類UIImageView+CircularImv。
UIImage+Extension.h文件
#import@interface UIImage (Extension)
- (UIImage *)circleImage;
@end
UIImage+Extension.m文件
#import "UIImage+Extension.h"
@implementation UIImage (Extension)
- (UIImage *)circleImage
{
// 開始圖形上下文,NO代表透明
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);
// 獲得圖形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 設(shè)置一個(gè)范圍
CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
// 根據(jù)一個(gè)rect創(chuàng)建一個(gè)橢圓
CGContextAddEllipseInRect(ctx, rect);
// 裁剪
CGContextClip(ctx);
// 將原照片畫到圖形上下文
[self drawInRect:rect];
// 從上下文上獲取剪裁后的照片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// 關(guān)閉上下文
UIGraphicsEndImageContext();
return newImage;
}
@end
使用了SDWebImage加載網(wǎng)絡(luò)圖片,所以加上UIImageView+WebCache.h頭文件。
UIImageView+CircularImv.h文件
#import@interface UIImageView (CircularImv)
- (void)setCircularImvURL:(NSString *)imageUrl holderImageName:(NSString *)imageName;
@end
UIImageView+CircularImv.m文件
#import "UIImageView+CircularImv.h"
#import "UIImageView+WebCache.h"
#import "UIImage+Extension.h"
@implementation UIImageView (CircularImv)
- (void)setCircularImvURL:(NSString *)imageUrl holderImageName:(NSString *)imageName
{
//占位圖片,當(dāng)URL上下載的圖片為空,就顯示該圖片
UIImage *placeholder = [[UIImage imageNamed:imageName] circleImage];
[self sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:placeholder completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
//當(dāng)圖片下載完會(huì)來到這個(gè)block,執(zhí)行以下代碼
self.image = image ? [image circleImage] : placeholder;
}];
}
@end
使用方法:
[self.cycleImv setCircularImvURL:網(wǎng)絡(luò)圖片地址 holderImageName:本地占位圖片名稱];