iOS_自定義轉(zhuǎn)場TabBar的隱藏動畫

  • 摘要
    實(shí)現(xiàn)同iOS 11 App Store Today相似的轉(zhuǎn)場效果.本文嘗試解決轉(zhuǎn)場(Transition)過程中TabBar的隱藏(向下滑出屏幕).
tabbar_ani_slow.gif
遇到的問題

項(xiàng)目中使用的是系統(tǒng)自帶的Storyboard上的TabBar,TabBar的隱藏使用的是hidesBottomBarWhenPushed方法.實(shí)現(xiàn)自定義轉(zhuǎn)場的過程中,TabBar會跟隨轉(zhuǎn)場動畫向左移出屏幕,但需求是向下滑出屏幕.如果自定義TabBar可能更容易實(shí)現(xiàn),具體效果可以點(diǎn)擊App Store上的"今日 App".

解決的問題

僅在自定義轉(zhuǎn)場中按需隱藏TabBar(push向下滑出屏幕,pop向上劃入屏幕),不影響其他使用系統(tǒng)轉(zhuǎn)場的頁面.

解決方案
  • 使用方法
    首先確定是否使用的自定義轉(zhuǎn)場,如果定義了自定義轉(zhuǎn)場的類,在要使用的頁面實(shí)現(xiàn)UINavigationControllerDelegate的代理方法
-(id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                 animationControllerForOperation:(UINavigationControllerOperation)operation
                                              fromViewController:(UIViewController *)fromVC
                                                toViewController:(UIViewController *)toVC 
{
    //根據(jù)類型返回對應(yīng)動畫
    if (operation == UINavigationControllerOperationPush) {
        return _trans;
    }else {
        return nil;
    }   
}

在我的工程中,存在著重寫的TabBarUITabBarController恤浪、UINavigationController的類分別實(shí)現(xiàn)不同的需求,要實(shí)現(xiàn)這種新增加的效果,最好的方法應(yīng)該是使用Category,所以我們定義UITabBar的類別UITabBar+CustomTabbar,實(shí)現(xiàn)動畫(出處作者稱為淡入淡出效果).

UITabBar+CustomTabbar.h
#import <UIKit/UIKit.h>

@interface UITabBar (HYCustomTabBar)<CAAction>

@end
UITabBar+CustomTabbar.m
#import "UITabBar+CustomTabbar.h"
 
@implementation UITabBar (CustomTabbar)
-(id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event{
    if ([event isEqualToString:@"position"]) {
        if(layer.position.x<0){
            //show tabbar
            CATransition *pushFromTop = [[CATransition alloc] init];
            pushFromTop.duration = 0.3;
            pushFromTop.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
            pushFromTop.type = kCATransitionPush;
            pushFromTop.subtype = kCATransitionFromTop;
            return pushFromTop;
        }else if (layer.position.x>0&&(layer.position.y>layer.bounds.size.height)&&(layer.position.y<[UIScreen mainScreen].bounds.size.height)){
            //hide tabbar
            CATransition *pushFromBottom = [[CATransition alloc] init];
            pushFromBottom.duration = 0.3;
            pushFromBottom.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
            pushFromBottom.type = kCATransitionPush;
            pushFromBottom.subtype = kCATransitionFromBottom;
            return pushFromBottom;
        }
    }
    return (id<CAAction>)[NSNull null];
}
 
-(void)runActionForKey:(NSString *)event object:(id)anObject arguments:(NSDictionary *)dict{
    
}
@end

其中

layer.position.y>layer.bounds.size.height
layer.position.y<[UIScreen mainScreen].bounds.size.height

是為了去除第一次加載視圖的情況僚饭。
然后在自己重寫的UITabBarController類中添加類別的引用

#import "TabVC.h"
#import "UITabBar+CustomTabbar.h"

@interface TabVC ()

@end
  ...
  • 這樣,在自定義轉(zhuǎn)場過程中,就能實(shí)現(xiàn)自定義的TabBar隱藏動效,而且實(shí)現(xiàn)了很大程度的解耦.
出處

貼出處自定義hidesBottomBarWhenPushed動畫,如侵刪

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秘蛔,一起剝皮案震驚了整個濱河市凌箕,隨后出現(xiàn)的幾起案子枪萄,更是在濱河造成了極大的恐慌伶选,老刑警劉巖史飞,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仰税,居然都是意外死亡构资,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門陨簇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吐绵,“玉大人,你說我怎么就攤上這事〖旱ィ” “怎么了唉窃?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纹笼。 經(jīng)常有香客問我纹份,道長,這世上最難降的妖魔是什么廷痘? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任蔓涧,我火速辦了婚禮,結(jié)果婚禮上笋额,老公的妹妹穿的比我還像新娘元暴。我一直安慰自己,他們只是感情好兄猩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布昨寞。 她就那樣靜靜地躺著,像睡著了一般厦滤。 火紅的嫁衣襯著肌膚如雪援岩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天掏导,我揣著相機(jī)與錄音享怀,去河邊找鬼。 笑死趟咆,一個胖子當(dāng)著我的面吹牛添瓷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播值纱,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼鳞贷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了虐唠?” 一聲冷哼從身側(cè)響起搀愧,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疆偿,沒想到半個月后咱筛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杆故,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年迅箩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片处铛。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡饲趋,死狀恐怖拐揭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奕塑,我是刑警寧澤堂污,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站爵川,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏息楔。R本人自食惡果不足惜寝贡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望值依。 院中可真熱鬧圃泡,春花似錦、人聲如沸愿险。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辆亏。三九已至风秤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扮叨,已是汗流浹背缤弦。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彻磁,地道東北人碍沐。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像衷蜓,于是被迫代替她去往敵國和親累提。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 前言的前言 唐巧前輩在微信公眾號「iOSDevTips」以及其博客上推送了我的文章后磁浇,我的 Github 各項(xiàng)指標(biāo)...
    VincentHK閱讀 5,341評論 3 44
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,520評論 25 707
  • 最后一次班聚 2017年5月26日 晚上六點(diǎn)半準(zhǔn)時開始 投影儀放著四年的點(diǎn)點(diǎn)滴滴 班服洋溢著青春氣息 可能真的很少...
    萍萍_sunshine閱讀 179評論 0 0