萌貨貓頭鷹登入介面動畫iOS實現分析

2022-05-30 22:00:17 字數 4409 閱讀 6751

動畫效果仿自國外**readme.io的登入介面,超萌可愛的貓頭鷹,具體效果如下圖所示.

動畫實現核心:

動畫核心的是用到了ios中uiview的transform屬性,然後根據尺寸座標對四張進行平移以及縮放.

具體的圖層結構如圖所示:

注意點:

核心**:

//相對於初始位置的平移

self.greenview.transform= cgaffinetransformmaketranslation(100,0);

//相對於上次位置的平移

self.greenview.transform= cgaffinetransformtranslate(self.greenview.transform,100,0);

//相對於初始尺寸的縮放,2是倍數

self.greenview.transform= cgaffinetransformmakescale(2,2);

//相對於上次的尺寸縮放0.5倍

self.greenview.transform= cgaffinetransformscale(self.greenview.transform,0.5,0.5);

步驟1:主要檢視在storyborad中建立

1.將兩個小點手臂和頭部放到乙個view中.

2.將那兩個長的手臂放到乙個view中,然後將這個view堆疊到1中的view上,位置要對應,手正好能蒙住眼睛,這個view的屬性要設定為超出部分自動裁剪.view的顏色為透明.

3.最後的檢視效果是這樣的.

步驟2:

考慮到**的封裝性,我們可以這整個view關聯到乙個uiview的類中.

1.對圖中的4張拖線到剛剛新建的類中,建立4個uiimageview屬性.對一整個view進行拖線

//arm是長長的手臂

@property(weak,nonatomic)iboutletuiimageview*leftarm;

@property(weak,nonatomic)iboutletuiimageview*rightarm;

//hand是那兩個小圓點

@property(weak,nonatomic)iboutletuiimageview*lefthand;

@property(weak,nonatomic)iboutletuiimageview*righthand;

//包含5張的整個view

@property(weak,nonatomic)iboutletuiview*viewframe;

2.在awakefromnib方法中對控制項進行初始化

獲得手臂相對於一整個view的位置,以及整個view的寬高

//當前左手的位置

cgfloatleftarmx= self.leftarm.frame.origin.x;

cgfloatleftarmy= self.leftarm.frame.origin.y;

//當前右手的位置

cgfloatrightarmx= self.rightarm.frame.origin.x;

cgfloatrightarmy= self.rightarm.frame.origin.y;

//viewframe的寬高

cgfloatviewframeh= self.viewframe.frame.size.height;

cgfloatviewframew= self.viewframe.frame.size.width;

根據以上資料計算得出,在初始狀態手臂的位置(注意:設定時手臂是蒙住眼睛的,初始狀態手臂是看不到的,只有兩個小點(hand))

//為了便於以後的計算,將左右手的初始位置設定為屬性

//15為根據顯示的位置作適當調整的尺寸

self.leftarmx= -leftarmx- 15;

self.leftarmy= viewframeh- leftarmy;

self.rightarmx= viewframew- rightarmx- self.rightarm.frame.size.width+15;

self.rightarmy= viewframeh- rightarmy;

//根據計算出的左右手的初始位置,設定初始位置左右手的偏移量

self.rightarm.transform= cgaffinetransformmaketranslation(self.rightarmx,self.rightarmy);

self.leftarm.transform= cgaffinetransformmaketranslation(self.leftarmx,self.leftarmy);

新增四個屬性

@property(nonatomic,assign)cgfloatleftarmx;

@property(nonatomic,assign)cgfloatleftarmy;

@property(nonatomic,assign)cgfloatrightarmx;

@property(nonatomic,assign)cgfloatrightarmy;

3.貓頭鷹的狀態有兩種,蒙住眼以及不矇眼的

//方便呼叫,樣式:[self.loginanim startanim:yes];

- (void)startanim:(bool)iscoverd

if(iscoverd)];

}else];}

1.矇眼狀態

//手臂偏移到蒙住眼睛的位置

self.rightarm.transform= cgaffinetransformtranslate(self.rightarm.transform,-self.rightarmx,-self.rightarmy);

self.leftarm.transform= cgaffinetransformtranslate(self.leftarm.transform,-self.leftarmx,-self.leftarmy);

//小圓點移動到眼睛的位置,30為根據顯示位置手動調整的尺寸

cgaffinetransformrighthand= cgaffinetransformtranslate(self.rightarm.transform,-self.rightarmx,-self.rightarmy+30);

cgaffinetransformlefthand=  cgaffinetransformtranslate(self.leftarm.transform,-self.leftarmx,-self.leftarmy+30);

//小圓點在移動的過程中逐漸減小

self.righthand.transform= cgaffinetransformscale(righthand,0.01,0.01);

self.lefthand.transform= cgaffinetransformscale(lefthand,0.01,0.01);

2.不矇眼

//兩個手臂回到初始化狀態

self.rightarm.transform= cgaffinetransformmaketranslation(self.rightarmx,self.rightarmy);

self.leftarm.transform= cgaffinetransformmaketranslation(self.leftarmx,self.leftarmy);

//兩個小圓點回到預設設定

self.righthand.transform= cgaffinetransformidentity;

self.lefthand.transform= cgaffinetransformidentity;

至此萌版貓頭鷹登入動畫就完成了.

螃蟹 貓頭鷹和蝙蝠

螃蟹 貓頭鷹和蝙蝠去上惡習糾正班。數年過後,它們都順利畢業並獲得博士學位。不過,螃蟹仍橫行,貓頭鷹仍白天睡覺晚上活動,蝙蝠仍倒懸。這是黃永玉大師的乙個寓言故事,它的寓意很簡單 行動比知識重要。如果一些連珠的妙語打動了你,如果一些文字或新信條啟發了你。那麼,這些別人的文字和經驗都只是乙個開始,更重要的...

螃蟹 貓頭鷹和蝙蝠

螃蟹 貓頭鷹和蝙蝠去上惡習糾正班。數年過後,它們都順利畢業並獲得博士學位。不過,螃蟹仍橫行,貓頭鷹仍白天睡覺晚上活動,蝙蝠仍倒懸。這是黃永玉大師的乙個寓言故事,它的寓意很簡單 行動比知識重要。如果一些連珠的妙語打動了你,如果一些文字或新信條啟發了你。那麼,這些別人的文字和經驗都只是乙個開始,更重要的...

螃蟹 貓頭鷹和蝙蝠

螃蟹 貓頭鷹和蝙蝠去上惡習糾正班。數年過後,它們都順利畢業並獲得博士學位。不過,螃蟹仍橫行,貓頭鷹仍白天睡覺晚上活動,蝙蝠仍倒懸。這是黃永玉大師的乙個寓言故事,它的寓意很簡單 行動比知識重要。如果一些連珠的妙語打動了你,如果一些文字或新信條啟發了你。那麼,這些別人的文字和經驗都只是乙個開始,更重要的...