UITabBar添加動畫

前幾天有個需求,就是UITabBar添加動畫,一開始沒啥好的思路,就去網(wǎng)上搜了一下有動畫效果的Demo,看了一些別人實現(xiàn)的代碼思路,總感覺有點繁瑣,最后找到了一種比較簡潔方便的辦法:
動畫的實現(xiàn),其本質(zhì)來講就是拿到需要實現(xiàn)動畫的UIView,然后把需求動畫添加到它的layer上就可以了。其實UITabBar也一樣,我們只要獲取到UITabBar顯示圖片的那個UIImageView,再往它的layer上加動畫就可以了。

1、創(chuàng)建一個繼承UITabBarController的類SCTabBarController,創(chuàng)建這個是為了把TabBarController的一些樣式及子viewControllers的代碼都統(tǒng)一寫在這里。

2、在viewDidLayoutSubviews方法里去遍歷tabBar.subviews,先找到繼承UITabBarButton類的控件,然后給添加一個點擊事件,設(shè)置一個tag來標示是第幾個tabBar:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    ///注意:每次顯示的時候需初始化tag
    self.kTabBarButtonTag = 1000;
    for (UIControl *tabBarButton in self.tabBar.subviews) {
        if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
            tabBarButton.tag = self.kTabBarButtonTag;
            self.kTabBarButtonTag = self.kTabBarButtonTag + 1;
            [tabBarButton addTarget:self action:@selector(tabBarButtonClick:) forControlEvents:UIControlEventTouchUpInside];
        }
    }
}

3、然后在tabBarButtonClick方法里,在通過遍歷tabBarButton.subviews來獲取到需要添加動畫的那個UIImageView,接下去就可以添加動畫了:

///tabbar點擊執(zhí)行動畫事件
- (void)tabBarButtonClick:(UIControl *)tabBarButton {
    for (UIImageView *imageView in tabBarButton.subviews) {
        if ([imageView isKindOfClass:NSClassFromString(@"UITabBarSwappableImageView")]) {
            // 需要實現(xiàn)的幀動畫,這里根據(jù)需求自定義
            NSMutableArray *array = [NSMutableArray array];
            for(NSUInteger i = 1; i < 9 ;i++) {
                switch (tabBarButton.tag) {
                    case 1000:{  ///首頁
                        UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"home_highlight_00%ld",i]];
                        CGImageRef cgimg = img.CGImage;
                        [array addObject:(__bridge UIImage *)cgimg];
                    } break;
                        
                    case 1001:{  ///生活
                        UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"life_highlight_00%ld",i]];
                        CGImageRef cgimg = img.CGImage;
                        [array addObject:(__bridge UIImage *)cgimg];
                    } break;
                        
                    case 1002:{  ///鄰里
                        UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"neighbor_highlight_00%ld",i]];
                        CGImageRef cgimg = img.CGImage;
                        [array addObject:(__bridge UIImage *)cgimg];
                    } break;
                        
                    case 1003:{  ///我的
                        UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"mine_highlight_00%ld",i]];
                        CGImageRef cgimg = img.CGImage;
                        [array addObject:(__bridge UIImage *)cgimg];
                    } break;
                        
                    default:
                        break;
                }
                
            }
            ///添加動畫
            CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
            animation.delegate = self;
            animation.values = array;
            animation.duration = 0.3;
            animation.calculationMode = kCAAnimationCubic;
            [imageView.layer addAnimation:animation forKey:nil];
        }
    }
}

至于動畫效果,則可以根據(jù)個人愛好、不同需求來實現(xiàn)。上面是實現(xiàn)了播放幀動畫的效果。

菜鳥筆記!希望對你有幫助

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,686評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,258評論 5 13
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,019評論 4 61
  • 男人在感情的事上更會瞻前顧后,而女人一旦狠下心來,便是什么都不顧。 我個人比較討厭感情上的藕斷絲連、瞻前顧后,畢竟...
    若希記閱讀 714評論 0 0
  • 四十多歲的人轉(zhuǎn)型,意味著風(fēng)險和比較大的機會成本。如果不轉(zhuǎn)型,年齡越大越要看老板臉色過日子,即便你有很好的專業(yè),也是...
    旅居上海的青青草閱讀 244評論 0 1

友情鏈接更多精彩內(nèi)容