本文提供方法,結(jié)合SDWebImage實(shí)現(xiàn)圓角圖片或圓角矩形圖片(也可實(shí)現(xiàn)靜態(tài)圖片圓角功能)
不使用layer切圓角顿痪,因?yàn)檫@會嚴(yán)重影響性能油够。原因:小心別讓圓角成了你列表的幀數(shù)殺手
對于網(wǎng)絡(luò)下載圖片
思路1:目前已有異步切圓角方法石咬,那么可以通過SD提供的函數(shù):
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
在completedBlock中將image貝塞爾切割為圓角圖片或圓角矩形圖
但是在實(shí)現(xiàn)以后發(fā)現(xiàn),一旦圖片下載失敗删性,那么sd不會調(diào)用completedBlock焕窝,無法實(shí)現(xiàn)placeholder占位圖片圓角,所以產(chǎn)生了新的思路
思路2:直接將placeholder占位圖直接處理為圓角圖片巴帮,然后再調(diào)用sd提供的函數(shù)。
目前可支持UIImageView和UIButton分別調(diào)用方法:
- UIImageView:(color設(shè)置為nil時(shí)垃沦,背景色為透明)
//網(wǎng)絡(luò)延遲下載--圓形
- (void)was_setCircleImageWithUrl:(NSURL *)url placeholder:(UIImage *)image fillColor:(UIColor *)color;
//網(wǎng)絡(luò)延遲下載--圓形矩陣
- (void)was_setRoundRectImageWithUrl:(NSURL *)url placeholder:(UIImage *)image fillColor:(UIColor *)color cornerRadius:(CGFloat) cornerRadius;
- UIButton:(color設(shè)置為nil時(shí)肢簿,背景色為透明)
//button--圓形
- (void)was_setCircleImageWithUrl:(NSURL *)url placeholder:(UIImage *)image fillColor:(UIColor *)color forState:(UIControlState)state;
//button--圓角矩形
- (void)was_setRoundRectImageWithUrl:(NSURL *)url placeholder:(UIImage *)image fillColor:(UIColor *)color cornerRadius:(CGFloat) cornerRadius forState:(UIControlState)state;
對于靜態(tài)圖片只恨,直接UIImage對象調(diào)用以下方法即可:
//圓形
- (void)was_roundImageWithSize:(CGSize)size fillColor:(UIColor *)fillColor completion:(void (^)(UIImage *))completion;
//圓角矩陣
- (void)was_roundRectImageWithSize:(CGSize)size fillColor:(UIColor *)fillColor radius:(CGFloat)radius completion:(void (^)(UIImage *))completion;
2017.2.16更新
新增方法
- UIImageView:
//網(wǎng)絡(luò)延遲下載--圓形 背景色為透明 無背景色
- (void)was_setCircleImageWithUrlString:(NSString *)urlString placeholder:(UIImage *)image;
//網(wǎng)絡(luò)延遲下載--圓形矩陣 背景色為透明 無背景色
- (void)was_setRoundRectImageWithUrlString:(NSString *)urlString placeholder:(UIImage *)image cornerRadius:(CGFloat) cornerRadius;
- UIButton:
//button--圓形 背景為透明 無背景色
- (void)was_setCircleImageWithUrlString:(NSString *)urlString placeholder:(UIImage *)image forState:(UIControlState)state;
//button--圓角矩形 背景為透明 無背景色
- (void)was_setRoundRectImageWithUrlString:(NSString *)urlString placeholder:(UIImage *)image cornerRadius:(CGFloat) cornerRadius forState:(UIControlState)state;
- 修復(fù)了placeholder為空時(shí)候崩潰問題
使用方法
- 在項(xiàng)目中加入SDWebImage
- 將文件夾RoundImage內(nèi)的UIImage+extension.h與UIImage+extension.m拖入項(xiàng)目
- 導(dǎo)入頭文件:#import "UIImage+extension.h"即可
注意點(diǎn):
- 如果背景色為nil的話纵菌,理論上會影響流暢度休涤,最好還是講背景色設(shè)為和cell背景色一樣,以提高tableview滑動的流暢度序苏。
*以上提供的方法不會受離屏渲染影響捷凄,但是會Color Blended Layers方面的影響,這就是影響到tableview性能的原因匈睁,但是影響十分小桶错。
缺點(diǎn):加載的時(shí)候會閃一下,原因是先展現(xiàn)了占位圖片糯钙,之后加載網(wǎng)絡(luò)圖片退腥。
當(dāng)設(shè)置占位圖為空時(shí),就不會閃了
如果有好的建議可以直接留言或者發(fā)送郵件:andysection@gmail.com
Thank you for your reading !
Github:Demo