美文网首页
UITabBar添加动画

UITabBar添加动画

作者: McDuff | 来源:发表于2016-11-17 18:47 被阅读112次

    前几天有个需求,就是UITabBar添加动画,一开始没啥好的思路,就去网上搜了一下有动画效果的Demo,看了一些别人实现的代码思路,总感觉有点繁琐,最后找到了一种比较简洁方便的办法:
    动画的实现,其本质来讲就是拿到需要实现动画的UIView,然后把需求动画添加到它的layer上就可以了。其实UITabBar也一样,我们只要获取到UITabBar显示图片的那个UIImageView,再往它的layer上加动画就可以了。

    1、创建一个继承UITabBarController的类SCTabBarController,创建这个是为了把TabBarController的一些样式及子viewControllers的代码都统一写在这里。

    2、在viewDidLayoutSubviews方法里去遍历tabBar.subviews,先找到继承UITabBarButton类的控件,然后给添加一个点击事件,设置一个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点击执行动画事件
    - (void)tabBarButtonClick:(UIControl *)tabBarButton {
        for (UIImageView *imageView in tabBarButton.subviews) {
            if ([imageView isKindOfClass:NSClassFromString(@"UITabBarSwappableImageView")]) {
                // 需要实现的帧动画,这里根据需求自定义
                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];
            }
        }
    }
    

    至于动画效果,则可以根据个人爱好、不同需求来实现。上面是实现了播放帧动画的效果。

    菜鸟笔记!希望对你有帮助

    相关文章

      网友评论

          本文标题:UITabBar添加动画

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