iOS 彩色TabBar切換動畫實現

2022-05-09 07:39:07 字數 1775 閱讀 7409

無意間看到乙個彩色tabbar切換的設計圖,感覺很不錯,有空就把他實現了。

環境資訊

mac os x 10.10.4

xcode 6.4

ios 8.4

效果圖:

效果圖

正文

看到這個彩色切換效果的時候,我第乙個反應就是在tabbar上有乙個彩色的view,然後每個色塊的顯示都是通過mask來顯示的。最終,我的具體實現也是根據這個思路來的。

1. 設計思想

為了減少侵入性(耦合),我採取的是繼承uitabbar來實現,所以要整合的時候,只需要將系統的tabbar換成我寫的tcolorfultabbar就可以了。

2. 檢視層級圖

檢視層級圖

1. 新增彩色檢視colorfulview

tcolorfultabbar.m

- (void)setupcolorview  

}

2. 新增彩色檢視的遮罩colorfulmaskview

之所以這裡的遮罩使用的是uiview而不是cashapelayer或者calayer,原因如下:

在設定遮罩的時候,將colorfulmaskview的layer設定為colorfulview的mask就可以了。

**實現如下:

tcolorfultabbar.m

- (void)setupmasklayer 

3. 設定**,獲取當前點選的下標

uitabbar並沒有獲取點選下標的介面,但是uitabbardelegate有,這個協議預設被uitabbarcontroller遵守。為了降低耦合性,採用uitabbar自己獲取下標,所以,需要uitabbar自己實現自己的delegate。

值得注意的是,不能在uitabbar的初始化方法中去設定self.delegate = self,因為即使設定了,也會被uitabbarcontroller覆蓋。最終解決方案是當uitabbar載入到父檢視上是,在修改delegate為self。

- (void)didmovetosuperview 

因為每次的移動位置與方向都和上次的下標與這次的下標有關,所以需要使用到屬性來記錄這兩個下標的值。

- (void)tabbar:(uitabbar *)tabbar didselectitem:(uitabbaritem *)item 

4. 移動遮罩,顯示不同的色塊

在做動畫的時候,需要考慮到效果的平滑性。整個動畫有兩個動畫組成,乙個是寬度放大的動畫,乙個是縮小到原來大小和位移動畫。整個動畫是easeinout的效果,所以拆開來看,就應該第乙個動畫easein,第二個動畫easeout。

一圖勝千言:

動畫線性圖

- (void)animation 

// 兩個動畫加起來是乙個easeinout的效果,所以第乙個動畫就應該是easein,第二個動畫是easeout

// 先進行放大

[uiview animatewithduration:animation_duration delay:0 options:uiviewanimationoptioncurveeasein animations:^ completion:^(bool finished) completion:null];

}];}

iOS學習筆記 TabBar

tabbar uitabbarcontoller顯示螢幕底部出現幾個標籤來管理不同檢視。如圖 使用步驟 1.初始化uitabbarcontroller uitabbarcontroller tb uitabbarcontroller alloc init 2.設定uiwindow的rootviewc...

ios的畫面切換的動畫效果

ios的畫面切換的動畫效果的api主要通過呼叫系統已定義的動畫效果實現,這些效果已基本囊括開發的需求,如果需要更加複雜的效果,可以考慮catransition來實現 以下是基本的四種效果 kcatransitionpush 推入效果 kcatransitionmovein 移入效果 kcatrans...

iOS美學之隱藏TabBar

方式一 從a push到 b 在a中的push到b之前 加上這句話 self.hidesbottombarwhenpushed yes 這樣b就沒有了tabbar 如果從b回到a,tabbar也不見了,只要在a中再加上這句就可以了 self.hidesbottombarwhenpushed no 方...