iOS 圓角優(yōu)化

在iOS開發(fā)中經(jīng)常會(huì)遇到需要切圓角的需求,最常見的是用戶頭像。在需要切圓角的圖片數(shù)量多的情況下,對(duì)性能影響非常大。

我們常用的方法是:

imageView.layer.cornerRadius = aImageView.frame.size.width/2.0;  
imageView.layer.masksToBounds = YES;

在這里就不多談 離屏渲染 了,只要知道,使用上面的代碼會(huì)發(fā)生離屏渲染,頻繁發(fā)生離屏渲染非常消耗性能。

優(yōu)化方案

  • 方法1: 保存視圖渲染內(nèi)容。(略作死)
  • 方法2: 對(duì)需要切圓角的圖片進(jìn)行預(yù)處理,緩存,顯示。
  • 方法3: 覆蓋一個(gè)圓形鏤空?qǐng)D片。

詳解

第一種方法點(diǎn)這里
方法2我覺得不妥,因?yàn)槊看斡行碌膱D片進(jìn)來都要預(yù)處理,把要顯示的圖片切成圓角,緩存起來。

詳細(xì)介紹第三種:
在需要顯示圓角的圖層上覆蓋一個(gè)鏤空的圖片,根據(jù)顏色,圓角的radius,圖片尺寸,這幾個(gè)參數(shù)作為key緩存這張鏤空的圖片,下次需要覆蓋的時(shí)候去判斷是否已經(jīng)緩存,復(fù)用。
缺點(diǎn):對(duì)視圖的背景有要求,單色背景效果就最為理想。

注意紅色的內(nèi)容

開發(fā)的時(shí)候,紅色這個(gè)地方應(yīng)該設(shè)置為跟背景同一個(gè)顏色。


實(shí)際效果

核心代碼如下,我把它寫層一個(gè)UIView的分類,拖進(jìn)自己的工程里邊,import一下就能用了!

完整代碼鏈接 << 點(diǎn)這里

- (void)addImageWithCornerRadius:(CGFloat)radius color:(UIColor *)color size:(CGSize)size {
    
    // 根據(jù)顏色,圓角程度,尺寸 命名文件
    NSString *name = [NSString stringWithFormat:@"%@_%f_%@.png", [color colorComponent], radius, NSStringFromCGSize(size)];
    NSString *fullPath = [[self pathWithFolder:@"CornerRadius"] stringByAppendingPathComponent:name];
    
    // 判斷本地是否已經(jīng)有緩存了
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL isExists = [fileManager fileExistsAtPath:fullPath];
    UIImage *image;
    if (isExists) {
        // 從緩存中獲取
        image = [UIImage imageNamed:fullPath];
    } else {
        // 緩存中沒有 -> 生成圖片 -> 保存
        image = [self getImageWithSize:size color:color radius:radius];
        NSData *data = UIImagePNGRepresentation(image);
        [data writeToFile:fullPath atomically:YES];
    }
    // 將生成的圖片覆蓋到當(dāng)前的圖層上
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(0, 0, size.width, size.height);
    [self addSubview:imageView];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 在iOS開發(fā)中經(jīng)常會(huì)遇到需要切圓角的需求,最常見的是用戶頭像。在需要切圓角的圖片數(shù)量多的情況下,對(duì)性能影響非常大。...
    指尖的跳動(dòng)閱讀 252評(píng)論 0 2
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,845評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,180評(píng)論 4 61
  • 讀大學(xué)時(shí),特別羨慕一位室友,他長(zhǎng)著一張神奇的嘴,從宿管大媽到校門口保安,從校醫(yī)務(wù)室小護(hù)士到校長(zhǎng)大大,跟誰都能聊上幾...
    野小喵閱讀 24,989評(píng)論 19 112
  • 我溫一壺相思 將別離之苦飲盡 同在天涯 卻形同陌路 這條小路幽幽暗暗 水波漣漣 倒映蒼涼明月 奈何惆悵上心頭 如彈...
    八度黑白閱讀 270評(píng)論 6 10