真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ios開發(fā)圓角,蘋果app圓角

iOS 設(shè)置圖片圓角的三種方式

方式一:通過 layer 設(shè)置圓角

臨湘網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。

最簡單的一種,但是影響性能,一般在正常的開發(fā)中使用很少

方式二:使用貝塞爾曲線UIBezierPath和Core Graphics框架畫出一個(gè)圓角

方式三:使用CAShapeLayer和UIBezierPath設(shè)置圓角

這種方式最好,內(nèi)存的消耗最少,而且渲染快速

iOS中設(shè)置圓角的方式

1.設(shè)置視圖的layer.cornerRadius屬性

內(nèi)存消耗16.9

對uiview或uiimageview使用layer.cornerRadius設(shè)置圓角時(shí),會觸發(fā)離屏渲染,會帶來額外的性能消耗,影響UI流暢.

這種方式適合用在設(shè)置圓角比較少頁面中,例如,頭像的圓角或者按鈕的圓角,可以用此方法,對性能的損耗可以忽略不計(jì).

離屏渲染(Off-Screen Rendering):意為GPU在當(dāng)前屏幕緩沖區(qū)以外新開辟一個(gè)緩沖區(qū)進(jìn)行操作;

在屏渲染(On-Screen Rendering): 意為當(dāng)前屏幕的渲染, 指的是GPU的渲染操作發(fā)生在當(dāng)前用于顯示的屏幕緩沖區(qū)中;

2.貝塞爾曲線+CoreGraphics

內(nèi)存消耗 8.6

這種方式適合用在設(shè)置圓角的控件比較多的情況下,用UIBezierPath和CoreGraphics框架畫出一個(gè)圓角.例如使用uitableview或者uicollectionView需要給cell添加圓角/給控件添加圓角,此方式不會操作到layer層,也能夠高效的添加圓角.

3.CoreGraphics

內(nèi)存消耗 8.6

CoreGraphics也稱為Quartz 2D 是UIKit下的主要繪圖系統(tǒng),頻繁的用于繪制自定義視圖。Core Graphics是高度集成于UIView和其他UIKit部分的。Core Graphics數(shù)據(jù)結(jié)構(gòu)和函數(shù)可以通過前綴CG來識別。

iOS: UIView,UILabel等 設(shè)置圓角的正確方式

之前的方式一般是這樣的:

label.layer.cornerRadius = 2;

label.layer.masksToBounds = YES /?label.layer.clipToBounds = YES

這樣會出現(xiàn)離屏渲染,如果是每個(gè)TableViewCell設(shè)置一些圓角,就會使列表滑動起來有明顯卡頓。

正確方式:

摒棄label.layer.masksToBounds = YES /?label.layer.clipToBounds = YES方法。

情形1:

對于不需要設(shè)置背景色的情況,只設(shè)置borderWidth、borderColor,cornerRadius,就可以實(shí)現(xiàn)圓角功能。

情形2:

對于設(shè)置背景色的情況,不去設(shè)置label的backgroundColor,而是直接設(shè)置label.layer.backgroundColor,這樣就可以實(shí)現(xiàn)單獨(dú)設(shè)置cornerRadius,顯示圓角的效果。

備注:

對于情形2,設(shè)置label的backgroundColor同時(shí)設(shè)置cornerRadius是不能正常顯示圓角的,再同時(shí)設(shè)置borderWidth、borderColor也不行。原因是:UILabel設(shè)置backgroundColor的行為,不再是設(shè)定layer的背景色而是為contents設(shè)置背景色。

iOS給UIImageView添加圓角的三種方法

在iOS開發(fā)中我們經(jīng)常會遇到給UIImageView添加圓角,如:給用戶頭像設(shè)置圓角等。在這里記錄一下使用過的三種方法。

方法一:通過設(shè)置UIView的layer來設(shè)置圓角

此方法的有個(gè)缺點(diǎn)是:會強(qiáng)制Core Animation提前渲染屏幕的離屏繪制, 而離屏繪制就會給性能帶來負(fù)面影響,會有卡頓的現(xiàn)象出現(xiàn)

方法二:通過Graphics繪制圖片,將圖片裁剪成圓角

裁剪后設(shè)置圖片即可

方法三: 依然是繪制圖片,這次是通過貝塞爾曲線繪制圖片

繪制后設(shè)置UIImageView的圖片即可

以上設(shè)置圖片圓角的三種方法,在使用過程中各有優(yōu)缺點(diǎn),需要根據(jù)實(shí)際情況具體判斷使用方法。

另外推薦一下我的導(dǎo)航欄聯(lián)動庫: GKNavigationController

iOS設(shè)置圓角的四種方法

cornerRadius屬性影響layer顯示的background顏色和前景框border,對layer的contents不起作用。故一個(gè)imgView(類型為UIImageView)的image不為空,設(shè)置imgView.layer的cornerRadius,是看不出顯示圓角效果的,因?yàn)閕mage是imgView.layer的contents部分。

這種情況下將layer的masksToBounds屬性設(shè)置為YES,可以正確的繪制出圓角效果。但是cornerRadius0,masksToBounds=YES,會觸發(fā)GPU的離屏渲染,當(dāng)一個(gè)屏幕上有多處觸發(fā)離屏渲染,會影響性能。通過勾選Instruments-Core Animation-Color Offscreen-Rendered Yellow,可以看到屏幕上觸發(fā)離屏渲染的會被渲染成黃色。離屏渲染的代價(jià)昂貴,蘋果也意識到會產(chǎn)生性能問題,所以iOS9以后的系統(tǒng)里能不產(chǎn)生離屏渲染的地方也就不用離屏渲染了。比如對UIImageView里png圖片設(shè)置圓角不會觸發(fā)離屏渲染。

通過設(shè)置view.layer的mask屬性,可以將另一個(gè)layer蓋在view上,也可以設(shè)置圓角,但是mask同樣會觸發(fā)離屏渲染。

有兩種方式來生成遮罩,一是通過圖片生成,圖片的透明度影響著view繪制的透明度,圖片遮罩透明度為1的部分view被繪制成的透明度為0,相反圖片遮罩透明度為0的部分view被繪制成的透明度為1。二是通過貝塞爾曲線生成,view中曲線描述的形狀部分會被繪制出來。

通過CPU重新繪制一份帶圓角的視圖來實(shí)現(xiàn)圓角效果,會大大增加CPU的負(fù)擔(dān),而且相當(dāng)于多了一份視圖拷貝會增加內(nèi)存開銷。但是就顯示性能而言,由于沒有觸發(fā)離屏渲染,所以能保持較高幀率。下例是繪制一個(gè)圓形圖片,繪制其它UIView并無本質(zhì)區(qū)別。重新繪制的過程可以交由后臺線程來處理。

此方法就是在要添加圓角的視圖上再疊加一個(gè)部分透明的視圖,只對圓角部分進(jìn)行遮擋。圖層混合的透明度處理方式與mask正好相反。此方法雖然是最優(yōu)解,沒有離屏渲染,沒有額外的CPU計(jì)算,但是應(yīng)用范圍有限。

以上四種方法的 Objective-C實(shí)現(xiàn)


當(dāng)前文章:ios開發(fā)圓角,蘋果app圓角
標(biāo)題鏈接:http://weahome.cn/article/hogggh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部