之前的方式一般是這樣的:
創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、微信平臺小程序開發(fā)、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。
label.layer.cornerRadius = 2;
label.layer.masksToBounds = YES /?label.layer.clipToBounds = YES
這樣會出現(xiàn)離屏渲染,如果是每個TableViewCell設(shè)置一些圓角,就會使列表滑動起來有明顯卡頓。
正確方式:
摒棄label.layer.masksToBounds = YES /?label.layer.clipToBounds = YES方法。
情形1:
對于不需要設(shè)置背景色的情況,只設(shè)置borderWidth、borderColor,cornerRadius,就可以實現(xiàn)圓角功能。
情形2:
對于設(shè)置背景色的情況,不去設(shè)置label的backgroundColor,而是直接設(shè)置label.layer.backgroundColor,這樣就可以實現(xiàn)單獨設(shè)置cornerRadius,顯示圓角的效果。
備注:
對于情形2,設(shè)置label的backgroundColor同時設(shè)置cornerRadius是不能正常顯示圓角的,再同時設(shè)置borderWidth、borderColor也不行。原因是:UILabel設(shè)置backgroundColor的行為,不再是設(shè)定layer的背景色而是為contents設(shè)置背景色。
cornerRadius屬性影響layer顯示的background顏色和前景框border,對layer的contents不起作用。故一個imgView(類型為UIImageView)的image不為空,設(shè)置imgView.layer的cornerRadius,是看不出顯示圓角效果的,因為image是imgView.layer的contents部分。
這種情況下將layer的masksToBounds屬性設(shè)置為YES,可以正確的繪制出圓角效果。但是cornerRadius0,masksToBounds=YES,會觸發(fā)GPU的離屏渲染,當一個屏幕上有多處觸發(fā)離屏渲染,會影響性能。通過勾選Instruments-Core Animation-Color Offscreen-Rendered Yellow,可以看到屏幕上觸發(fā)離屏渲染的會被渲染成黃色。離屏渲染的代價昂貴,蘋果也意識到會產(chǎn)生性能問題,所以iOS9以后的系統(tǒng)里能不產(chǎn)生離屏渲染的地方也就不用離屏渲染了。比如對UIImageView里png圖片設(shè)置圓角不會觸發(fā)離屏渲染。
通過設(shè)置view.layer的mask屬性,可以將另一個layer蓋在view上,也可以設(shè)置圓角,但是mask同樣會觸發(fā)離屏渲染。
有兩種方式來生成遮罩,一是通過圖片生成,圖片的透明度影響著view繪制的透明度,圖片遮罩透明度為1的部分view被繪制成的透明度為0,相反圖片遮罩透明度為0的部分view被繪制成的透明度為1。二是通過貝塞爾曲線生成,view中曲線描述的形狀部分會被繪制出來。
通過CPU重新繪制一份帶圓角的視圖來實現(xiàn)圓角效果,會大大增加CPU的負擔(dān),而且相當于多了一份視圖拷貝會增加內(nèi)存開銷。但是就顯示性能而言,由于沒有觸發(fā)離屏渲染,所以能保持較高幀率。下例是繪制一個圓形圖片,繪制其它UIView并無本質(zhì)區(qū)別。重新繪制的過程可以交由后臺線程來處理。
此方法就是在要添加圓角的視圖上再疊加一個部分透明的視圖,只對圓角部分進行遮擋。圖層混合的透明度處理方式與mask正好相反。此方法雖然是最優(yōu)解,沒有離屏渲染,沒有額外的CPU計算,但是應(yīng)用范圍有限。
以上四種方法的 Objective-C實現(xiàn)
方式一:通過 layer 設(shè)置圓角
最簡單的一種,但是影響性能,一般在正常的開發(fā)中使用很少
方式二:使用貝塞爾曲線UIBezierPath和Core Graphics框架畫出一個圓角
方式三:使用CAShapeLayer和UIBezierPath設(shè)置圓角
這種方式最好,內(nèi)存的消耗最少,而且渲染快速
新聞名稱:ios開發(fā)圓角設(shè)置,iphone圓角界面設(shè)置
當前URL:http://aaarwkj.com/article30/dsshdpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、品牌網(wǎng)站建設(shè)、網(wǎng)站營銷、云服務(wù)器、ChatGPT、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)