iOS 开发

自定义 UITabBar 点击动画

2016-09-26  本文已影响63人  Metaz

网上的一些定义 tabBar 点击动画的做法一般是自定义一个 tabBar 把这个 tabBar 通过 KVC 设置给 tabBarController 然后在这个 tabBar 里做一些自定义。但是tabBar 的实现对我们是未知的,很难保证这种替换方式会不会造成其他的副作用,所以最好的方法就是不去动 tabBar 而是想办法拿到想要进行动画的 view。

先通过 Reveal 分析一下 UITabBarController 的 结构:

1.先建一个 Demo 过程,tabBarController 有2个 childViewcontroller,一个有title一个没有title。

Simulator Screen Shot 2016年9月26日 17.44.31.png

2.通过 Reveal 分析 tabBar 的子控件会发现每个可以点击的 item 是一个叫“UITabBarButton”的控件,这个控件负责承载图片和标题文字(如果存在)。

屏幕快照 2016-09-26 17.46.31.jpg 屏幕快照 2016-09-26 17.48.36.jpg

3.3.知道了控件的名字我们就可以在 UITabBarController 的 delegate 方法 - (void)tabBarController:(UITabBarController)tabBarController didSelectViewController:(UIViewController)viewController; 中定位当前点击的按钮然后找到对应的图片了。

- (void)tabBarController:(UITabBarController*)tabBarController didSelectViewController:(UIViewController*)viewController
{

    NSMutableArray *tabBarButtonArray = [NSMutableArray array];   

    [tabBarController.tabBar.subviews enumerateObjectsUsingBlock:^(__kindof UIView*_Nonnull obj,NSUInteger idx,BOOL *_Nonnull stop) {

       if([obj isKindOfClass:NSClassFromString(@"UITabBarButton")]) {//先找到所有 UITabBarButton 类型的子控件
           [tabBarButtonArray addObject:obj];
       }

    }];

    UIView *tabBarButton = [tabBarButtonArray objectInIndex:tabBarController.selectedIndex];//找到当前被选择的 button

    __block UIImageView *imageView = nil;//找到 button 上的图片,然后就可以添加动画了

    [tabBarButton.subviews enumerateObjectsUsingBlock:^(__kindof UIView *_Nonnull obj,NSUInteger idx,BOOL *_Nonnull stop) {

    if([obj isKindOfClass:[UIImageViewclass]]) {
        imageView = obj;
        *stop =YES;
    }
   }];

}
上一篇下一篇

猜你喜欢

热点阅读