iOS 雷達掃瞄效果 實現

2021-07-09 10:52:23 字數 4136 閱讀 7349

1 rotationanimation.removedoncompletion =no;

23 rotationanimation.fillmode = kcafillmodeforwards;

fillmode的作用就是決定當前物件過了非active時間段的行為. 比如動畫開始之前,動畫結束之後。如果是乙個動畫caanimation,則需要將其removedoncompletion設定為no,要不然fillmode不起作用.

下面來講各個fillmode的意義 

kcafillmoderemoved

這個是預設值,也就是說當動畫開始前和動畫結束後,動畫對layer都沒有影響,動畫結束後,layer會恢復到之前的狀態 

kcafillmodeforwards

當動畫結束後,layer會一直保持著動畫最後的狀態 

kcafillmodebackwards

這個和kcafillmodeforwards是相對的,就是在動畫開始前,你只要將動畫加入了乙個layer,layer便立即進入動畫的初始狀態並等待動畫開始.你可以這樣設定測試**,將乙個動畫加入乙個layer的時候延遲5秒執行.然後就會發現在動畫沒有開始的時候,只要動畫被加入了layer,layer便處於動畫初始狀態 

kcafillmodeboth

理解了上面兩個,這個就很好理解了,這個其實就是上面兩個的合成.動畫加入後開始之前,layer便處於動畫初始狀態,動畫結束後layer保持動畫最後的狀態.

3d,顧名思義就是可以在z軸上動作,這裡列舉三個用例

//用例1scale

cabasicanimation *theanimation = [cabasicanimation animationwithkeypath:@"

transform"];

catransform3d transform = 

catransform3dmakescale(0.5, 0.5, 1.0); 

//x,y,z放大縮小倍數

nsvalue *value = [nsvalue valuewithcatransform3d:transform];

[theanimation settovalue:value];

transform = catransform3dmakescale(1.0, 1.0, 1.0);

value = [nsvalue valuewithcatransform3d:transform];

[theanimation setfromvalue:value];

[theanimation setautoreverses:yes]; 

//原路返回的動畫一遍

[theanimation setduration:1.0];

[theanimation setrepeatcount:2];

[layer addanimation:theanimation forkey:nil];

//用例2rotate

......

catransform3d transform = 

catransform3dmakerotation(1.57, 1, 1, 0);

表示所轉角度的弧度 = 90pi/180 = 90*3.14/180

nsvalue *value = [nsvalue valuewithcatransform3d:transform];

[theanimation settovalue:value];

transform = catransform3dmakerotation(0, 1, 1, 0);

value = [nsvalue valuewithcatransform3d:transform];

[theanimation setfromvalue:value];

......

//用例3scale+rotate+position

cabasicanimation *anim = [cabasicanimation animationwithkeypath:@"transform"];

catransform3d rotatetransform = catransform3dmakerotation(1.57, 0, 0, -1);

catransform3d scaletransform = catransform3dmakescale(5, 5, 5);

catransform3d positiontransform = 

catransform3dmaketranslation(0, 0, 0); 

//位置移動

catransform3d combinedtransform =

catransform3dconcat(rotatetransform, scaletransform);

//concat就是combine的意思

combinedtransform = catransform3dconcat(combinedtransform, positiontransform); 

//再combine一次把三個動作連起來

[anim setfromvalue:[nsvalue valuewithcatransform3d:catransform3didentity]];

//放在3d座標系中最正的位置

[anim settovalue:[nsvalue valuewithcatransform3d:combinedtransform]];

[anim setduration:5.0f];

[layer addanimation:anim forkey:nil];

[layer settransform:combinedtransform];  

//如果沒有這句,layer執行完動畫又會返回最初的state

前幾天做動畫,使用到了catransform3d ,由於沒有學過計算機圖形學,矩陣中m11--m44的各個含義都不清楚,經過幾天研究總結如下:(供和我一樣的菜鳥學習)

struct catransform3d

; ps:

#import 。

iphone 透視效果(perspective)

catransform3d transform 

=catransform3didentity

;transform.

m34=0.0005

;// 透視效果

transform 

=catransform3drotate

(transform

,(m_pi

/180*40)

,0,1

,0);

[piece.

layer

settransform

:transform

]; 第二行一定要寫在第三行的前面!自己理解!

//

// viewcontroller.m

// test_scananimation_01

//// created by admin on 1/13/16.

//#import "viewcontroller.h"

@inte***ce viewcontroller ()

@end

@implementation viewcontroller

- (void)viewdidload

#pragma mark - 動畫**方法

#pragma mark 動畫開始

-(void)animationdidstart:(caanimation *)anim

#pragma mark 動畫結束

-(void)animationdidstop:(caanimation *)anim finished:(bool)flag

- (void)didreceivememorywarning

@end

iOS下拉列表效果實現

控制項的屬性以及介面 主按鈕 可以自定義樣式 可在.m檔案中修改預設的一些屬性 property nonatomic,strong uibutton mainbtn property nonatomic,assign id delegate 下拉列表中的選項標題以及選項高度的設定 一些其他具體樣式的...

iOS中UIView翻轉效果實現

新建乙個view based模板工程,在viewcontroller檔案中新增下面的 即可實現翻轉效果 void viewdidload super viewdidload 需要翻轉的檢視 uiview parentview uiview alloc initwithframe cgrectmake...

ios雷達脈衝效果

objc view plain copy font family arial,helvetica,sans serif background color rgb 255,255,255 具體先看效果圖 直接上 objc view plain copy inte ce ccradarview uivi...