iOS 自訂layer的兩種方式

來源:互聯網
上載者:User

標籤:

在iOS中,你能看得見摸得著的東西基本都是UIView,比如一個按鈕,一個標籤,一個文本輸入框,這些都是UIView;

其實UIView之所以能顯示在螢幕上,完全是因為它內部的一個圖層

在建立UIView對象時,UIView內部會自動建立一個圖層(即CALayer對象),通過UIView的layer屬性可以訪問這個圖層

@property(nonatomic,readonly,retain) CALayer *layer;

每一個UIView內部都預設關聯一個CALayer,我們可稱這個Layer為RootLayer(根層)

接下來介紹自訂CALayer的兩種方式:繼承方式,代理方式。在講解這兩種方式之前,先講解一下UIView的顯示過程

每個UIview都是自己內部圖層的代理,代碼解釋為:self.layer.delegate = self; self代表某個View 

1.當我們每次建立一個UIView的時候,view.layer首先會準備一個layer類型的上下文

2.調用view.layer.delegate(view本身)-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 方法,並且把第一步準備好的上下文傳遞進來

3.-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx中又會調用-(void)drawRect:(CGRect)rect

4.view 的-(void)drawRect:(CGRect)rect方法就實現繪製東西的代碼,並且繪製的映像最終會繪製到view.layer上

5.系統將view.layer的內容拷貝到螢幕上,就會完成view的顯示

分析明白上面的過程,我們就很明白當我們自訂UIView的時候,在-(void)drawRect:(CGRect)rect編寫繪圖代碼的時候,首先通過UIGraphicsGetCurrentContext() 擷取-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx方法中傳遞進來的上下文, 

接下來講解通過繼承方式自訂CALayer

1.首先建立一個類,繼承CALayer

2 在HFLayer.m中

在這個方法中,可以繪製圖形

接下來,

 

可以發現,通過我們自訂的Layer類建立出來的layer對象,裡面內建了一個圓,這個圓就是-(void)drawInContext:(CGContextRef)ctx中繪製的圖形

第二種:通過代理的方式自訂layer

設定完代理對象以後,調用-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx

這個時候,看

大家肯定有疑惑的地方,第一:layer.delegate = self;為什麼不用遵守協議?就會有-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx方法

layer 的代理屬性沒有協議;我們經常見到的一般都是

這種代理屬性。

第二:UIView 和 Layer都有 setNeedDisplay 重繪的方法。

 

 

無論哪一種自訂layer的方式,最後都要記得重繪,不然會沒有效果;

大家只要會用這兩種自訂layer的方式就可以了,深究原理,我也是不太懂,只是懂個大概。

有的同學會說圓的位置怎麼不在layer的中心,這個是因為座標設定的原因,修改一下座標點就會在中間了;

大家可以看出,layer同樣可以做到和UIImageView一樣的效果。都可以顯示東西;那麼到底使用layer還是UIImagView呢?

這個要看實際功能,如果只是顯示圖片的話,不需要與使用者互動。就可以用Layer,因為Layer只負責顯示映像,少了與使用者的互動,可以提高效能;

如果顯示的圖片要與使用者進行互動的話,就只能用UIView來處理了,不能使用Layer了;

 

iOS 自訂layer的兩種方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.