iOS學習 核心動畫之Layer基礎

2021-10-10 08:44:37 字數 3922 閱讀 3832

//

預設圖層是有陰影的, 只不過,是透明的

_redview.layer.shadowopacity = 1;//

設定陰影的圓角

_redview.layer.shadowradius =10;//

設定陰影的顏色,把uikit轉換成coregraphics框架,用.cg開頭

_redview.layer.shadowcolor = [uicolor bluecolor].cgcolor;

//

設定圖層邊框,在圖層中使用coregraphics的cgcolorref

_redview.layer.bordercolor =[uicolor whitecolor].cgcolor;

_redview.layer.borderwidth = 2;

//

圖層的圓角半徑,圓角半徑為寬度的一半, 就是乙個圓

_redview.layer.cornerradius = 50;

//

設定圖形邊框

_imageview.layer.borderwidth = 2

;_imageview.layer.bordercolor =[uicolor whitecolor].cgcolor;

//設定的圓角半徑,必須要進行第二步的裁剪,超出裁剪區域的部分全部裁剪掉

_imageview.layer.cornerradius = 50

;_imageview.layer.maskstobounds = yes;

設定的圓角時,除了設定圓角半徑,還必須要進行第二步的裁剪,設定

uiimageview中是uiview的主layer上新增了乙個次layer(用來繪製contents),我們設定邊框的是主layer,但是次layer在上變,不會有任何的影響,所以當我們呼叫切割語句的時候,超出邊框意外的都被切割了!!

uiview和layer都有transform屬性,但是他們的所屬有區別,型別也有區別

1.picview.transform是二維的屬性,是cgaffinetransform型別

2.picview.layer.transform是layer級別的三維屬性,是catransform3d型別的,當然也可以做二維的事情,只有旋轉的時候才可以看出3d的效果.

//

旋轉 x,y,z 分別代表x,y,z軸.

catransform3dmakerotation(m_pi, 1, 0, 0

);

//平移

catransform3dmaketranslation(x,y,z)

//縮放

catransform3dmakescale(x,y,z);

屬性設定有三種方法

//

1.直接使用基本的三維賦值方法

picview.layer.transform = catransform3dmakescale(1, 2.5, 0

);

//2.使用kvc將catransform3dmakescale生成的物件給layer

nsvalue *value = [nsvalue valuewithcatransform3d:catransform3dmakerotation(m_pi, 1, 0, 0

)];[picview.layer setvalue:value forkeypath:

@"transform.scale"];

//3.使用快捷方法設定屬性

[picview.layer setvalue:@5 forkeypath: "

transform.scale.y

"];

什麼時候用kvc?

當需要做一些快速縮放,平移,二維的旋轉時用kvc。後面forkeypath屬性值不是亂寫的,蘋果文件當中給了相關的屬性.

比如: [_imageview.layer setvalue:@0.5 forkeypath:@"transform.scale"];

//

建立calayer *layer =[calayer layer];

//設定尺寸和位置

layer.frame = cgrectmake(50, 50, 100, 100

);//

設定背景

layer.backgroundcolor =[uicolor redcolor].cgcolor;

//給layer設定.

layer.contents = (id)[uiimage imagenamed:@"image001

"].cgimage;

//載入繪製

[self.view.layer addsublayer:layer];

在明白要怎麼選擇之前,我們先了解一下uiview和layer的不同點:

,。它是決點calayer身上哪乙個點會在position屬性所指的位置

//

下面兩行**就是設定views的 正中間 座標(200,200)

_views.layer.position = cgpointmake(200, 200

);_views.layer.anchorpoint = cgpointmake(0.5, 0.5

);//

下面兩行**就是設定views的 左上角 座標(200,200)

_views.layer.position = cgpointmake(200, 200

);_views.layer.anchorpoint = cgpointmake(0, 0

);//

下面兩行**就是設定views的 右下角 座標(200,200)

_views.layer.position = cgpointmake(200, 200

);_views.layer.anchorpoint = cgpointmake(1, 1);

//

開啟事務

[catransaction begin];

//設定事務沒有動畫

[catransaction setdisableactions:yes];

//設定動畫執行的時長

[catransaction setanimationduration:2

];//

提交事務

[catransaction commit];

具體時間可以用用一張圓形來顯示,然後在這個imageview的layer中進行時針、分針和秒針的繪製。

//

新增秒針

- (void

)addsecond

//時針、分針的新增方式類似,只是設定的寬高有點區別,不再貼出來

//

角度轉換成弧度

#define angle2rad(angle) ((angle) / 180.0 * m_pi)

//每一秒 秒針 旋轉6度

#define perseconda 6

//每一分 分針 旋轉

#define permina 6

//每一小時 時針 旋轉30

#define perhoura 30

//第一分鐘 時針 旋轉0.5

#define perminhour 0.5

//每一秒呼叫一次

- (void

)timechage

每過一秒,我們的秒針就需要變化位置,所以我們我們需要設定乙個定時器,在開始時每秒執行一次旋轉布局繪製。

iOS核心動畫學習

calayer 所具有而uiview沒有的功能 layer.contents bridge id image.cgimage 單獨新增乙個圖層 calayer 缺省會產生動畫 uiview自帶的圖層 view.layer 之所以沒有動畫,是因為uiview把隱式動畫給禁止了。每個uiview對它關聯...

IOS核心動畫

void basicanimation calayer layer animation.duration 2 animation.delegate self animation.removedoncompletion no animation.fillmode kcafillmodeforwards...

IOS開發核心動畫篇 核心動畫簡介

ios開發ui篇 核心動畫簡介 一 簡單介紹 core animation,中文翻譯為核心動畫,它是一組非常強大的動畫處理api,使用它能做出非常炫麗的動畫效果,而且往往是事半功倍。也就是說,使用少量的 就可以實現非常強大的功能。core animation是跨平台的,可以用在mac os x和io...