iOS 圓角那些事

似乎沒(méi)有那家公司比Apple更愛(ài)圓角了,事實(shí)上,圓角也會(huì)讓圖形/產(chǎn)品看起來(lái)更加無(wú)侵略性,能夠帶來(lái)更好的用戶(hù)體驗(yàn).
iOS開(kāi)發(fā)中各種圓角也隨處可見(jiàn),最簡(jiǎn)單給控件添加圓角的方式就是給視圖的layer設(shè)置corner屬性了:

self.blueView.layer.cornerRadius = 5.f; 
self.blueView.layer.masksToBounds = YES;

這種方式會(huì)帶來(lái)兩個(gè)問(wèn)題:

  1. 當(dāng)圖片數(shù)量比較多的時(shí)候,這種添加圓角方式特別消耗性能,比如在UITableViewCell
    添加過(guò)多圓角的話(huà),甚至?xí)?lái)視覺(jué)可見(jiàn)的卡頓.
  2. 無(wú)法配置圓角數(shù)量(只能添加view的四個(gè)角全為圓角),無(wú)法配置某個(gè)圓角大小.
    第一個(gè)問(wèn)題實(shí)際上是由于數(shù)量太多的情況下,系統(tǒng)會(huì)頻繁的調(diào)用GPU的離屏渲染(Offscreen Rendering)機(jī)制,導(dǎo)致內(nèi)存損耗嚴(yán)重.更多關(guān)于離屏渲染的詳解,可以看這里,本文不多贅述.
    第二個(gè)問(wèn)題,我們可以使用UIBezierPath
    來(lái)完美解決.以下是示例代碼:
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.blueView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomLeft cornerRadii:CGSizeMake(20, 0)]; 
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.blueView.bounds; 
maskLayer.path = maskPath.CGPath; 
self.blueView.layer.mask = maskLayer; 
self.blueView.layer.cornerRadius = 5.f; 
self.blueView.layer.masksToBounds = YES;

想要配置某個(gè)角為圓角的話(huà),只需要指定對(duì)應(yīng)的UIRectCorner
即可

也可以采用下面這種方法 : 采取預(yù)先生成圓角圖片割按,并緩存起來(lái)這個(gè)方法才是比較好的手段资溃。預(yù)處理圓角圖片可以在后臺(tái)處理藐吮,處理完畢后緩存起來(lái),再在主線(xiàn)程顯示哭尝,這就避免了不必要的離屏渲染了驹吮。

self.layer.cornerRadius = 6;
self.layer.masksToBounds = YES; // 裁剪
self.layer.shouldRasterize = YES; // 緩存
self.layer.rasterizationScale = [UIScreen mainScreen].scale;

當(dāng)shouldRasterize設(shè)成true時(shí),layer被渲染成一個(gè)bitmap贡定,并緩存起來(lái)赋访,等下次使用時(shí)不會(huì)再重新去渲染了。實(shí)現(xiàn)圓角本 身就是在做顏色混合(blending),如果每次頁(yè)面出來(lái)時(shí)都blending蚓耽,消耗太大渠牲,這時(shí)shouldRasterize = yes,下次就只是簡(jiǎn)單的從渲染引擎的cache里讀取那張bitmap步悠,節(jié)約系統(tǒng)資源签杈。

如果在滾動(dòng)tableView時(shí),每次都執(zhí)行圓角設(shè)置鼎兽,肯定會(huì)阻塞UI答姥,設(shè)置這個(gè)將會(huì)使滑動(dòng)更加流暢

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市接奈,隨后出現(xiàn)的幾起案子踢涌,更是在濱河造成了極大的恐慌,老刑警劉巖序宦,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睁壁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡互捌,警方通過(guò)查閱死者的電腦和手機(jī)潘明,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)秕噪,“玉大人钳降,你說(shuō)我怎么就攤上這事‰缃恚” “怎么了遂填?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)澈蝙。 經(jīng)常有香客問(wèn)我吓坚,道長(zhǎng),這世上最難降的妖魔是什么灯荧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任礁击,我火速辦了婚禮,結(jié)果婚禮上逗载,老公的妹妹穿的比我還像新娘哆窿。我一直安慰自己,他們只是感情好厉斟,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布挚躯。 她就那樣靜靜地躺著,像睡著了一般擦秽。 火紅的嫁衣襯著肌膚如雪秧均。 梳的紋絲不亂的頭發(fā)上食侮,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音目胡,去河邊找鬼。 笑死链快,一個(gè)胖子當(dāng)著我的面吹牛誉己,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播域蜗,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼巨双,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了霉祸?” 一聲冷哼從身側(cè)響起筑累,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丝蹭,沒(méi)想到半個(gè)月后慢宗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奔穿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年镜沽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贱田。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缅茉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出男摧,到底是詐尸還是另有隱情蔬墩,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布耗拓,位于F島的核電站拇颅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏帆离。R本人自食惡果不足惜蔬蕊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哥谷。 院中可真熱鬧岸夯,春花似錦、人聲如沸们妥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)监婶。三九已至旅赢,卻和暖如春齿桃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背煮盼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工短纵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人僵控。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓香到,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親报破。 傳聞我的和親對(duì)象是個(gè)殘疾皇子悠就,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 似乎沒(méi)有那家公司比Apple更愛(ài)圓角了,事實(shí)上,圓角也會(huì)讓圖形/產(chǎn)品看起來(lái)更加無(wú)侵略性,能夠帶來(lái)更好的用戶(hù)體驗(yàn).i...
    饅頭MT閱讀 539評(píng)論 0 6
  • 轉(zhuǎn)載:http://www.reibang.com/p/32fcadd12108 每個(gè)UIView有一個(gè)伙伴稱(chēng)為l...
    F麥子閱讀 6,157評(píng)論 0 13
  • 每個(gè)UIView有一個(gè)伙伴稱(chēng)為layer,一個(gè)CALayer充易。UIView實(shí)際上并沒(méi)有把自己畫(huà)到屏幕上;它繪制本身...
    shenzhenboy閱讀 3,086評(píng)論 0 17
  • 這次我們來(lái)說(shuō)說(shuō)iOS app中滑動(dòng)的那些事梗脾。iOS為了提高滑動(dòng)的流暢感,特意在滑動(dòng)的時(shí)候?qū)unloop模式切換到...
    樹(shù)下老男孩閱讀 18,377評(píng)論 16 160
  • 現(xiàn)在盹靴,在外面遇到一個(gè)校友就覺(jué)得特別親切炸茧,特別高興,可是鹉究,你隨便一個(gè)班級(jí)群不都是校友嗎宇立?你說(shuō)萍水相逢是緣分,那同窗三...
    沒(méi)有故事的周同學(xué)閱讀 148評(píng)論 0 0