美文网首页iOS 开发
自定义 UITabBar 点击动画

自定义 UITabBar 点击动画

作者: Metaz | 来源:发表于2016-09-26 18:01 被阅读63次

    网上的一些定义 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;
        }
       }];
    
    }
    

    相关文章

      网友评论

        本文标题:自定义 UITabBar 点击动画

        本文链接:https://www.haomeiwen.com/subject/azvqyttx.html