動(dòng)畫(huà)轉(zhuǎn)場(chǎng)和交互 tabBar摊沉、Navi、present

轉(zhuǎn)場(chǎng)動(dòng)畫(huà)代碼下載主要是tabBar痒给、Navi说墨、present ;其實(shí)它里面設(shè)置到了 主要涉及到了 動(dòng)畫(huà)苍柏、交互

1 . TabBar的切換

tabbarVC 里面本身含有 <UITabBarControllerDelegate>這個(gè)代理尼斧,這個(gè)時(shí)候我們定義一個(gè) id<UITabBarControllerDelegate>類(lèi)型的實(shí)例MyTransitionTabbarDelegateManager是現(xiàn)實(shí)里面的 動(dòng)畫(huà)和交互,讓tabBarVC的delegate= MyTransitionTabbarDelegateManager對(duì)象

下面是代碼實(shí)現(xiàn)

MyTransitionTabbarDelegateManager

#import "MyTransitionTabbarDelegateManager.h"
#import "MyTransitionTabBarAnimator.h"

@interface MyTransitionTabbarDelegateManager ()

@property (nonatomic,strong) UIPercentDrivenInteractiveTransition * interactiveTransition;

@end

@implementation MyTransitionTabbarDelegateManager

- (instancetype)init {
    
    if (self = [super init]) {
        
        self.interactiveTransition = [[UIPercentDrivenInteractiveTransition alloc]init];
        self.interactive = NO;
    }
    return self;
}


//切換動(dòng)畫(huà)
- (id<UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarController animationControllerForTransitionFromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC {
    
    NSInteger fromIndex = [tabBarController.viewControllers indexOfObject:fromVC];
    NSInteger toIndex   = [tabBarController.viewControllers indexOfObject:toVC];
    
    NSLog(@"from:%@;to:%@",fromVC,toVC);
    
    /* 確定方向 **/
    MyTransitionTabBarAnimator * animator = [[MyTransitionTabBarAnimator alloc]init];
    animator.isSlideToRight = fromIndex > toIndex?YES:NO;
    return animator;
}

//交互動(dòng)畫(huà)
- (id<UIViewControllerInteractiveTransitioning>)tabBarController:(UITabBarController *)tabBarController interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController {
    
    if (self.interactive) {
        
        return self.interactiveTransition;
    }
    return nil;
}



@end

交互主要是 通過(guò)繼承 UITabBarController 來(lái)獲得一個(gè)子類(lèi) 然后在里面添加手勢(shì)

#import "MyScrollTabBarController.h"
#import "MyTransitionTabbarDelegateManager.h"

@interface MyScrollTabBarController ()

/* 處理 頁(yè)面交換 和 動(dòng)畫(huà) **/
@property (nonatomic,strong) MyTransitionTabbarDelegateManager * tabBarDelegateManager;

@end

@implementation MyScrollTabBarController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.tabBarDelegateManager = [[MyTransitionTabbarDelegateManager alloc]init];
    self.delegate = self.tabBarDelegateManager;
    
    UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
    [self.view addGestureRecognizer:pan];
    
    NSInteger i = 0;
    for (UIViewController * vc in self.viewControllers) {
        
        NSLog(@"vc_%ld:%@",(long)i++,vc);
    }
    
}

#pragma mark - 私有方法
- (void)panAction:(UIPanGestureRecognizer *)pan {
    
    CGFloat translationX = [pan translationInView:self.view].x;
    CGFloat progress = fabs(translationX)/CGRectGetWidth(self.view.frame);
    switch (pan.state) {
        case UIGestureRecognizerStateBegan: {
            
            self.tabBarDelegateManager.interactive = YES;
            /* 
             *根據(jù)pan的速度 來(lái)判斷 滑動(dòng)的方向
             * 假設(shè) 兩點(diǎn)(x1试吁,0)棺棵,(x2,0);
             * 如果 x1 -》x2 滑動(dòng)烛恤,如果向右邊滑動(dòng) 那么 x2 > x1;那么x1-x2<0;
             ***/
            CGFloat vX = [pan velocityInView:self.view].x;
            if (vX < 0) { // 說(shuō)明是向右邊滑動(dòng)
                
                NSInteger tmpSelectedIndex = self.selectedIndex +1;
                if (tmpSelectedIndex < self.viewControllers.count) {
                    self.selectedIndex = tmpSelectedIndex;
                }
            } else {
                
                NSInteger tmpSelectedIndex = self.selectedIndex -1;
                if (tmpSelectedIndex >= 0) {
                    self.selectedIndex = tmpSelectedIndex;
                }
            }
            
            break;
        }
        case UIGestureRecognizerStateChanged: {
            
            /* 比例的更新**/
            [self.tabBarDelegateManager.interactiveTransition updateInteractiveTransition:progress];
            break;
        }
        case UIGestureRecognizerStateEnded:
        case UIGestureRecognizerStateCancelled: {
            
            if (progress > 0.5) {
                
                [self.tabBarDelegateManager.interactiveTransition finishInteractiveTransition];
            } else {
                [self.tabBarDelegateManager.interactiveTransition cancelInteractiveTransition];
            }
            self.tabBarDelegateManager.interactive = NO;
            break;
        }
        default: {
            
            break;
        }
           
    }
}





@end

里面的 動(dòng)畫(huà)MyTransitionTabBarAnimator 主要是實(shí)現(xiàn)動(dòng)畫(huà)時(shí)間動(dòng)畫(huà)交互 母怜,接下來(lái)就是交互 我們通過(guò) MyTransitionTabbarDelegateManager 里面的 UIPercentDrivenInteractiveTransition 主要是控制百分比、取消和完成

2 . 導(dǎo)航的切換

也是一樣我們定義一個(gè)對(duì)象遵循 <UINavigationControllerDelegate> 協(xié)議的一個(gè)對(duì)象MyNaiTransitionManager 來(lái)管理 里面的 動(dòng)畫(huà)交互

3 . present的切換

也是一樣棒动,假設(shè) vc1 =present =》vc2糙申,這個(gè)時(shí)候需要實(shí)現(xiàn) vc2的代理UIViewControllerTransitioningDelegate的實(shí)例 MyVCTransionManager ,其實(shí)我們可以要知道 在vc2 中我們才能獲取到 vc1的view 和vc2的view

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市船惨,隨后出現(xiàn)的幾起案子柜裸,更是在濱河造成了極大的恐慌,老刑警劉巖粱锐,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疙挺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡怜浅,警方通過(guò)查閱死者的電腦和手機(jī)铐然,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恶座,“玉大人搀暑,你說(shuō)我怎么就攤上這事】缌眨” “怎么了自点?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)脉让。 經(jīng)常有香客問(wèn)我桂敛,道長(zhǎng),這世上最難降的妖魔是什么溅潜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任术唬,我火速辦了婚禮,結(jié)果婚禮上滚澜,老公的妹妹穿的比我還像新娘粗仓。我一直安慰自己,他們只是感情好博秫,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布潦牛。 她就那樣靜靜地躺著,像睡著了一般挡育。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朴爬,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天即寒,我揣著相機(jī)與錄音,去河邊找鬼。 笑死母赵,一個(gè)胖子當(dāng)著我的面吹牛逸爵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凹嘲,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼师倔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了周蹭?” 一聲冷哼從身側(cè)響起趋艘,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凶朗,沒(méi)想到半個(gè)月后瓷胧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棚愤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年搓萧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宛畦。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瘸洛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出次和,到底是詐尸還是另有隱情反肋,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布斯够,位于F島的核電站囚玫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏读规。R本人自食惡果不足惜抓督,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望束亏。 院中可真熱鬧铃在,春花似錦、人聲如沸碍遍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)怕敬。三九已至揣炕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間东跪,已是汗流浹背畸陡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工鹰溜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丁恭。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓曹动,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親牲览。 傳聞我的和親對(duì)象是個(gè)殘疾皇子墓陈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,331評(píng)論 25 707
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實(shí)...
    香橙柚子閱讀 23,921評(píng)論 8 183
  • 在漫漫人生中第献,幸運(yùn)的孩子贡必,會(huì)自悟或者遇到那么一兩個(gè)關(guān)鍵的“節(jié)點(diǎn)”,突然間獲得了巨大的動(dòng)力痊硕,然后他會(huì)積極地去尋求達(dá)到...
    linglingchai閱讀 154評(píng)論 0 0
  • 2016/08/16
    箱貓日和閱讀 280評(píng)論 0 0
  • 大三開(kāi)始決定考研赊级,就我一個(gè)人,她們都不打算考岔绸。我只有跟別班的同學(xué)結(jié)伴而行了理逊。停止了看電影,看小說(shuō)盒揉,吃喝玩樂(lè)晋被。 我從...
    如煙出岫閱讀 285評(píng)論 2 2