使用核心動畫 需導入QuartzCore 框架(現在不需要)
#import <QuartzCore/QuartzCore.h>
Core Animation 核心動畫 CA
CALayer 和 UIView 的關係:
在UIView 中有一個layer屬性作爲根圖層,根圖層沒有隱式動畫,根圖層上可以放其他子視圖,在UIView中能夠看到的內容都包含在layer中
CALayer 負責視圖上顯示的內容和動畫
UIView負責監聽和響應事件
CALayer在修改他的屬性時都能形成動畫效果 這種動畫效果 叫做隱式動畫。
由於CALayer在設計之初就考慮它的動畫操作功能,CALayer很多屬性在修改時都能形成動畫效果,這種屬性稱爲“隱式動畫屬性”。
--------------------------------------------------------
CALayer常用屬性
屬性 說明 是否支持隱式動畫
anchorPoint 錨點、定位點 錨點的描述是相對於 *自己* x、y位置比例而言的 默認在圖像中心點(0.5,0.5)的位置 決定圖層的哪一個點 顯示在中心點的位置 是
backgroundColor 圖層背景顏色 是
borderColor 邊框顏色 是
borderWidth 邊框寬度 是
bounds 圖層大小 是
contents 圖層顯示內容,例如可以將圖片作爲圖層內容顯示 是
contentsRect 圖層顯示內容的大小和位置 是
cornerRadius 圓角半徑 是
doubleSided 圖層背面是否顯示,默認爲YES 否
frame 圖層大小和位置,不支持隱式動畫,所以CALayer中很少使用frame,通常使用bounds和position代替 否
hidden 是否隱藏 是
mask 圖層蒙版 是
maskToBounds 子圖層是否剪切圖層邊界,默認爲NO 是
opacity 透明度 ,類似於UIView的alpha 是
position 決定圖層在父視圖的位置 圖層位於 *父視圖* 中心點位置,類似於UIView的center 是
shadowColor 陰影顏色 是
shadowOffset 陰影偏移量 是
shadowOpacity 陰影透明度,注意默認爲0,如果設置陰影必須設置此屬性 是
shadowPath 陰影的形狀 是
shadowRadius 陰影模糊半徑 是
sublayers 子圖層 是
sublayerTransform 子圖層形變 是
transform 圖層形變
一、CALayer 的初始化及其常用屬性
<span style="font-size:14px;color:#333333;"> myLayer = [[CALayer alloc]init];
myLayer.backgroundColor = [UIColor redColor].CGColor;
myLayer.bounds = CGRectMake(0, 0, 100, 100);
// 設置中心點
myLayer.position = self.view.center;
// 設置圓
myLayer.cornerRadius = 100/2;
myLayer.borderWidth = 2;
myLayer.borderColor = [UIColor whiteColor].CGColor;
myLayer.shadowColor = [UIColor yellowColor].CGColor;
myLayer.shadowOffset = CGSizeMake(-1, -1);
// 設置陰影顏色,必須設置 shadowOpacity 陰影顏色的透明度(默認是0,完全透明)
myLayer.shadowOpacity = 1.0;
</span><span style="font-size:14px;color:#ff0000;">// 子圖層 是添加到根圖層上的</span><span style="font-size:14px;color:#333333;">
[self.view.layer addSublayer:myLayer];</span>
二、圖層覆蓋,重疊
1、先定義一個圖層
<span style="font-size:14px;"> myLayer = [[CALayer alloc]init];
myLayer.backgroundColor = [UIColor brownColor].CGColor;
myLayer.shadowColor = [UIColor redColor].CGColor;
myLayer.shadowOpacity = 1; // 如果不設置透明度的話,不會顯示在設備上,默認爲0,改爲1.
width = 100;
myLayer.bounds = CGRectMake(0, 0, width, width);
myLayer.position = self.view.center;
myLayer.cornerRadius = width/2;
myLayer.borderWidth = 2;
myLayer.borderColor = [UIColor whiteColor].CGColor;
myLayer.shadowOffset = CGSizeMake(-1, -1);
[self.view.layer addSublayer:myLayer];</span>
2、定義第二個圖層覆蓋在第一個上
<span style="font-size:14px;"><span style="color:#33cc00;"> imageLayer = [[CALayer alloc]init];
imageLayer.shadowOpacity = 1; // 如果不設置透明度的話,不會顯示在設備上,默認爲0,改爲1.
</span><span style="color:#ff6600;">imageLayer.bounds = myLayer.bounds;
imageLayer.position = myLayer.position;
imageLayer.cornerRadius = myLayer.cornerRadius;</span><span style="color:#33cc00;">
imageLayer.contents = (id)([UIImage imageNamed:@"105.jpg"].CGImage);
imageLayer.masksToBounds = YES;
[self.view.layer addSublayer:imageLayer];</span></span>