整個(gè)view都是直接構(gòu)建在Core Animation層之上。每個(gè)UIView實(shí)例都帶有一個(gè)CALayer實(shí)例肴盏,用來管理布局屬性招狸,即所有用戶可見的部分婿滓,都是由CALayer來提供的,而UIView只是封裝了CALayer洲劣,在它之上添加了響應(yīng)事件的能力备蚓。
CALayer的基本屬性
- 寬高
@property CGRect bounds;
- 位置(默認(rèn)指中點(diǎn),具體由anchorPoint決定):
@property CGPoint position;
- 錨點(diǎn)(x,y的范圍都是0-1)囱稽,決定了position的含義:
@property CGPoint anchorPoint;
- 背景顏色(CGColorRef類型):
@property CGColorRef backgroundColor;
- 形變屬性:
@property CATransform3D transform;
- 圓角:
@property CGFloat cornerRadius;
- 邊框?qū)?/li>
@property CGFloat borderWidth;
- 邊框顏色
@property CGColorRef borderColor
CALayer坐標(biāo)系統(tǒng)
在layer中郊尝,有以下四種屬性:bounds、frame战惊、anchorPoint流昏、position,bounds是用來表示layer內(nèi)部坐標(biāo)位置的,frame是相對(duì)于父layer的位置,若它為view的第一層layer况凉,那么這個(gè)位置是相對(duì)于父view的谚鄙。anchorPoint是用來影響變形動(dòng)畫的一個(gè)值,在view的左上角為(0, 0)刁绒,右下角為(1, 1)闷营,默認(rèn)為(0.5, 0.5),在view的中心知市。變形動(dòng)畫傻盟,比如旋轉(zhuǎn),會(huì)繞著這個(gè)點(diǎn)來進(jìn)行嫂丙。position是anchorPoint的位置娘赴,如果layer不動(dòng),anchorPoint的值改變跟啤,也會(huì)改變position的位置诽表。
CALayer的子類
-
CAEmitterLayer
CoreAnimation框架中的CAEmitterLayer是一個(gè)粒子發(fā)射器系統(tǒng),負(fù)責(zé)粒子的創(chuàng)建和發(fā)射源屬性隅肥。通過它竿奏,我們可以輕松創(chuàng)建出炫酷的粒子效果。
-
CAGradientLayer
CAGradientLayer可以創(chuàng)建出色彩漸變的圖層效果
-
CAEAGLLayer
CAEAGLLayer可以通過OpenGL ES來進(jìn)行界面的繪制腥放。
-
CAReplicatorLayer
CAReplicatorLayer是一個(gè)layer容器议双,會(huì)對(duì)其中的subLayer進(jìn)行復(fù)制和屬性偏移,通過它捉片,可以創(chuàng)建出類似倒影的效果,也可以進(jìn)行變換復(fù)制.
-
CAScrollLayer
CAScrollLayer可以支持其上管理的多個(gè)子層進(jìn)行滑動(dòng)汞舱,但是只能通過代碼進(jìn)行管理伍纫,不能進(jìn)行用戶點(diǎn)按觸發(fā)。
-
CAShapeLayer
CAShapeLayer可以讓我們?cè)趌ayer層是直接繪制出自定義的形狀昂芜。
-
CATextLayer
CATextLayer可以通過字符串進(jìn)行文字的繪制莹规。
-
CATiledLayer
CATiledLayer類似瓦片視圖,可以將繪制分區(qū)域進(jìn)行泌神,常用于一張大的圖片的分不分繪制良漱。
-
CATransformLayer
CATransformLayer用于構(gòu)建一些3D效果的圖層。
Core Animation定義了許多種不同的layer欢际,上面的每種layer都繼承自CALayer類母市,在view中默認(rèn)提供的layer即CALayer,可以通過繼承UIView并重寫layerClass方法來定義不同的layer损趋,當(dāng)然患久,也可以通過添加sublayer來在UIView中增加其它種類的layer。
layer動(dòng)畫分為顯式動(dòng)畫和隱式動(dòng)畫兩種,顯式動(dòng)畫通過生成一個(gè)CAAnimation類蒋失,顯式的添加到layer上來實(shí)現(xiàn)返帕,隱式動(dòng)畫通過直接給layer的屬性賦值來實(shí)現(xiàn),比如:
theLayer.opacity = 0.0;
這就聲明了一個(gè)隱式動(dòng)畫篙挽,默認(rèn)的動(dòng)畫時(shí)長(zhǎng)為0.25秒荆萤。
顯式動(dòng)畫可以定義動(dòng)畫的路徑、開始值铣卡、結(jié)束值链韭、持續(xù)時(shí)間、重復(fù)次數(shù)等算行,生成的實(shí)例添加到layer上就開始執(zhí)行動(dòng)畫梧油。動(dòng)畫在結(jié)束后返回layer的原狀態(tài),可以在addAnimation之后修改layer的屬性來讓它保持動(dòng)畫結(jié)束的狀態(tài)州邢,或者變換其他狀態(tài)儡陨。也可以用CAKeyFrameAnimation來實(shí)現(xiàn)指定路徑的動(dòng)畫.
不同的動(dòng)畫可以組合成一個(gè)CAAnimationGroup,可以同時(shí)執(zhí)行量淌,實(shí)現(xiàn)復(fù)雜的動(dòng)畫骗村,比如在大小改變的同時(shí)改變顏色等。CAAnimation也可以設(shè)置delegate呀枢,用來在動(dòng)畫開始和結(jié)束時(shí)回調(diào)胚股。