IOS中的動畫

2021-06-19 12:30:58 字數 4610 閱讀 9259

ios中的動畫右兩大類1.uiview的檢視動畫2.layer的動畫 uiview的動畫也是基於layer的動畫

動畫的**格式都很固定

1.uiview動畫

一般方式

[uiview beginanimations:@"ddd" context:nil];//設定動畫

[uiview commitanimations]; //提交動畫

這兩個是必須有的,然後在兩句的中間新增動畫的**

[uiview beginanimations:@"ddd" context:nil];//設定動畫 ddd為動畫名稱

[uiview setanimationduration:3];//定義動畫持續時間

[uiview setanimationcurve:uiviewanimationcurveeaseinout]; //setanimationcurve來定義動畫加速或減速方式

[uiview setanimationtransition:uiviewanimationtransitioncurldown forview:self.window cache:yes];

//設定動畫的樣式  forview為哪個view實現這個動畫效果

[uiview setanimationdelay:3]; //設定動畫延遲多久執行

[uiview setanimationdelegate:self];  //設定動畫的** 實現動畫執行前後的方法 在commitanimation之前設定

[uiview setanimationdidstopselector:@selector(stop)];//設定動畫結束後執行的方法

[uiview setanimationwillstartselector:@selector(star)];//設定動畫將要開始執行的方法

[uiview commitanimations]; //提交動畫

typedef enum uiviewanimationtransition;

typedef enum uiviewanimationcurve;

[uiview beginanimations:@"ddd" context:nil]; //設定動畫

view.frame = cgrectmake(200, 200, 100, 100);

[uiview commitanimations]; //提交動畫

當view從本來的frame移動到新的frame時會慢慢漸變 而不是一下就完成了 中間也可以新增到上面那段中間 只是多種效果重疊

以下這些也可以加到  [uiview beginanimations:@"ddd" context:nil]; [uiview commitanimations];之間

view.transform = cgaffinetransformmaketranslation(10, 10);//設定偏移量 相對於最初的 只能偏移一次

view.transform = cgaffinetransformtranslate(view.transform, 10, 10); //設定偏移量 偏移多次

self.view.transform = cgaffinetransformmakerotation(m_pi);//設定旋轉度 只能旋轉一次

self.view.transform = cgaffinetransformrotate(self.view.transform, m_pi); //旋轉多次

self.view.transform = cgaffinetransformmakescale(1.1, 1.1); //設定大小 只能改變一次 數值時相對於本來的幾倍

self.view.transform = cgaffinetransformscale(self.view.transform, 1.1, 1.1);//改變多次

self.view.transform = cgaffinetransformidentity;//回到當初的樣子 執行一次

self.view.transform = cgaffinetransforminvert(self.view.transform);//得到相反的樣子 大小 方向 位置執行多次

block方式

[uiview animatewithduration:3 animations:^(void)completion:^(bool finished)];

2.caanimation

需要新增庫,和包含標頭檔案

caanimation有多個子類

cabasicanimation

cabasicanimation *animation = [cabasicanimation animationwithkeypath:@"opacity"];

//@""裡的字串有多種,可以自己找相關資料,一定要填對,動畫才會執行 opacity設定透明度 bounds.size設定大小

[animation setfromvalue:[nsnumber numberwithfloat:1.0]]; //設定透明度從幾開始

[animation settovalue:[nsnumber numberwithfloat:0.3]];//設定透明度到幾結束

[animation setduration:0.1]; //設定動畫時間

[animation setrepeatcount:100000];//設定重複時間

[animation setrepeatduration:4];  //會限制重複次數

[animation setautoreverses:no];//設定是否從1.0到0.3 再從0.3到1.0 為一次  如果設定為no則 1.0到0.3為一次

[animation setremovedoncompletion:yes]; //完成時移出動畫 預設也是

[view.layer addanimation:animation forkey:@"abc"];//執行動畫

cakeyframeanimation

cakeyframeanimation *animation = [cakeyframeanimation animationwithkeypath:@"position"];//設定view從初始位置經過一系列點

nsarray *postionaraay = [nsarray arraywithobjects:[nsvalue valuewithcgpoint:cgpointmake(100, 20)], [nsvalue valuewithcgpoint:cgpointmake(40, 80)],[nsvalue valuewithcgpoint:cgpointmake(30, 60)],[nsvalue valuewithcgpoint:cgpointmake(20, 40)],[nsvalue valuewithcgpoint:cgpointmake(0, 100)],nil];//設定點

nsarray *times = [nsarray arraywithobjects:[nsnumber numberwithfloat:0.3],[nsnumber numberwithfloat:0.5],[nsnumber numberwithfloat:0.6],[nsnumber numberwithfloat:0.1],[nsnumber numberwithfloat:1.0], nil];  //設定移動過程的時間

[animation setkeytimes:times];

[animation setvalues:postionaraay];

[animation setduration:5]; //設定動畫時間

[bigimage.layer addanimation:animation forkey:@"dd"]; //執行動畫

catransition

catransition *animation = [catransition animation];

animation.duration = 0.5f;

animation.timingfunction = uiviewanimationcurveeaseinout;

animation.fillmode = kcafillmodeforwards;

/*kcatransitionfade;

kcatransitionmovein;

kcatransitionpush;

kcatransitionreveal;

*//*

kcatransitionfromright;

kcatransitionfromleft;

kcatransitionfromtop;

kcatransitionfrombottom;

*/animation.type = kcatransitionpush;

animation.subtype = kcatransitionfrombottom;

[view.layer addanimation:animation forkey:animation];

type也可以直接用字串

/*cube

suckeffect 卷走

oglflip    翻轉

rippleeffect  水波

pagecurl   翻頁

pageuncurl

camerairishollowopen

camerairishollowclose

*/

iOS中的UIView動畫

1.uikit直接將動畫整合到uiview類中,當內部的一些屬性發生改變 時,uiview將為這些改變提供動畫支援 2.執行動畫所需要的工作由uiview類自動完成,但仍要在希望執行動畫時通知檢視,為此需要將改變屬性的 放在 uiview beginanimations nil context ni...

ios中UIView應用動畫

一.uiview應用動畫 初始化乙個初始 uiimage startimage uiimage imagenamed starttarget.jpeg 初始化開始頁面 self.startview uiimageview alloc initwithimage startimage 設定頁面位置 s...

iOS 動畫 UIView動畫

viewcontroller.m ui 23 動畫 import viewcontroller.h inte ce viewcontroller property strong,nonatomic iboutlet uiview opeview1 property strong,nonatomic ...