
WyhCornerRadius
- GitHub : https://github.com/XiaoWuTongZhi/WyhCornerRadius
- 快速設(shè)置視圖的圓角;
- 支持所有繼承于UIView的視圖;
- 支持4個方向設(shè)置圓角;
- 支持邊框、邊框顏色、背景色、背景圖;
- 可自定義圓角度數(shù);
- 一行代碼設(shè)置圓角;
- 避免離屏渲染,簡單高效;
初衷
給大家科普一下吧,其實并不是設(shè)置圓角就會導(dǎo)致離屏渲染,離屏渲染也并不只是只有圓角才能導(dǎo)致,在iOS11之前只要同時設(shè)置圓角maskToBounds和borderWidth時才會導(dǎo)致離屏渲染,iOS11以后系統(tǒng)已經(jīng)優(yōu)化兼容了這兩個屬性所導(dǎo)致的問題,但目前大多數(shù)應(yīng)用還是需要適配11系統(tǒng)以下的,所以設(shè)置圓角及邊框所導(dǎo)致的離屏渲染問題需要在iOS11以下避免,這就是WyhCornerRadius要干的事。
現(xiàn)在GitHub上雖然已經(jīng)有不少設(shè)置圓角的庫,但本人在使用的時候感覺不盡理想,因此結(jié)合了諸多作者們的優(yōu)點,簡單寫了這個,在這感謝ZYCornerRadius-master和JMRoundedCorner-master開源精神。
在這里簡單說說前兩個庫的優(yōu)缺點吧,ZYCornerRadius-master一旦引用了類別,以后就會自動設(shè)置上圓角了,即使這個時候用戶突然不想設(shè)置圓角;其次這個庫的圓角繪制并不是在異步執(zhí)行的,因此性能堪憂;但優(yōu)點很明顯,API方法簡單,且重寫了layoutSubview,這樣可支持以后隨時賦圖,但有一點沒看懂的是,沒有必要去再設(shè)置一個observer去監(jiān)聽setImage,因為KVO其實就是抓的是set方法,如果有必要再去交換一下方法不就好了,layoutSubview一旦被重寫,就沒必要再去監(jiān)聽setImage了吧,不知道這樣理解有沒有問題。
JMRoundedCorner-master這個庫依賴的文件太多,(YYCache、YYImage、YYWebImage) 不過優(yōu)點很明顯啊,圓角繪制是在異步性能很好,可支持的自定義很多(包括圓角的角度,方向等),Demo寫的很高大上,不過API方法略顯繁瑣,最蛋疼的是,UIImageView圓角設(shè)置的時候必須同希望最終顯示的圖片一起賦值,哪怕這是一個網(wǎng)絡(luò)圖片的url,不過本人認為圓角設(shè)置更應(yīng)該像一個屬性一樣存在,在初始化的時候去設(shè)置一遍即可(是屬于UI層的),為什么非要將方法寫在跟數(shù)據(jù)層交互的地方呢?很不理解。
對比
傳統(tǒng)意義上的圓角邊框設(shè)置類似于以下的形式,在iOS11以下設(shè)備上無疑會產(chǎn)生GPU性能問題 :
img.layer.borderColor = [UIColor redColor].CGColor;
img.layer.borderWidth = 1;
img.layer.masksToBounds = YES;
img.layer.cornerRadius = 20.0f;
WyhCornerRadius設(shè)置圓角邊框的形式如下,只需要在初始化的時候設(shè)置一遍即可,以后隨時變換圖片都行,所以當然支持SDWebImage網(wǎng)絡(luò)賦圖啦:
[img wyh_autoSetImageCornerRedius:20.0f ConrnerType:(UIRectCornerAllCorners) BorderColor:[UIColor redColor] BorderWidth:1 Image:nil];
性能上的對比其實在iOS11以下特別明顯,大家可以到Demo中去查看,在UIImageView的Demo中點擊naviBar右上角的按鈕即可對比顯示未通過WyhCornerRadius設(shè)置的性能問題
最近時間比較少,很久沒有寫東西了,喜歡的幫我點個star,最后歡迎issue我,隨時call我
CocoaPods
WyhCornerRadius現(xiàn)已支持cocoaPods
pod search WyhCornerRadius
