? 之前開發(fā)的時(shí)候了解過一些持痰,現(xiàn)在決定從頭整理,并將學(xué)習(xí)CALayer中發(fā)現(xiàn)的一些之前沒注意的小細(xì)節(jié)記錄下來:
1 positon 屬性
? 該屬性設(shè)置的不是layer的中心點(diǎn),而是錨點(diǎn)的位置anchorPoint:錨點(diǎn)范圍為:(0,1),默認(rèn)跟layer的中心點(diǎn)重合屠尊,為(0.5,0.5)耕拷。
?因?yàn)閒rame屬性并不具備動(dòng)畫效果讼昆,所以在開發(fā)的過程中,主要使用bounds和position的結(jié)合骚烧。
2 ?圖形繪制的時(shí)候 上下顛倒的問題
如果只是繪制一張圖片浸赫,直接設(shè)置contents屬性:
該方法是不需要考慮坐標(biāo)問題的。
但是如果復(fù)雜的情況下使用
-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx
方法的話赃绊,就需要考慮圖形繪制的上下顛倒問題既峡,解決的方法有兩種:
1)
2)繞x軸旋轉(zhuǎn)180°:
3)相對(duì)于直接的代碼表示,還可以通過keyPath設(shè)置旋轉(zhuǎn)碧查,如:
這樣寫最主要的是搞明白keyPath有哪些:
想要討論的是第二種方法运敢,繞軸旋轉(zhuǎn)到底是如何繞的?該如何理解忠售?
首先传惠,原圖如下:
如果是繞y軸的話,你想象坐標(biāo)原點(diǎn)在中心點(diǎn)的下方稻扬,圖形的最下方是x軸卦方,y軸經(jīng)過中心點(diǎn),這樣的話就很容易理解繞軸旋轉(zhuǎn)的原理了:
同理泰佳,如果是繞x軸旋轉(zhuǎn)的話盼砍,就是y軸在最左邊,x軸經(jīng)過中心點(diǎn)乐纸。
最后衬廷,我再解釋一下旋轉(zhuǎn)角度:
M_PI:3.141593
M_PI_2:1.570796
所以在轉(zhuǎn)換度數(shù)的時(shí)候應(yīng)該是:例 45°:45 /180*M_PI
3 使用自定義圖層繪圖
自定義圖形指的就是繼承于CALayer的子類,通過調(diào)用類中的-(void)drawInContext:(CGContextRef)ctx方法來繪圖汽绢。為了顯示再定義一個(gè)UIView的子類吗跋,UIView在創(chuàng)建的時(shí)候會(huì)自動(dòng)的指定自身為CALayer的代理,所以在UIView中需要調(diào)用setNeedsDisplay方法宁昭。UIView會(huì)自動(dòng)創(chuàng)建位圖上下文跌宛,通過視圖中的-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx方法將CGContextRef傳遞給CALayer方法中。而在UIView的draw:inContext:方法中會(huì)調(diào)用其drawRect:方法积仗,在drawRect:方法中使用UIGraphicsGetCurrentContext()方法得到的上下文正是前面創(chuàng)建的上下文疆拘。