导航按钮抖动动画就是上面的箭头所指的按钮transform大小变化的动画:
实现方案是,在UITabBarController添加子控制器时,都对子控制器的vc.tabBarItem.tag标记下,通过逐级遍历tabBar的子控件,当获得UITabBarSwappableImageView子控件时,就可以对此类的实例对象做动画处理即可,参照代码如下1 2 3步骤:
1
- [self addChildViewController:[self loadViewControllerWithString:@"MYHomeController" andTitle:@"首页"andImageStr:@"tabbar_home" andImageSel:@"tabbar_home_highlighted" andIndex:0]];
- ......................
- [self addChildViewController:[self loadViewControllerWithString:@"MYProfileController" andTitle:@"我" andImageStr:@"tabbar_profile" andImageSel:@"tabbar_profile_highlighted" andIndex:3]];
- 2
- - (UINavigationController *)loadViewControllerWithString:(NSString *)string andTitle:(NSString *)title andImageStr:(NSString *)imgStr andImageSel:(NSString *)imageSelStr andIndex:(NSInteger) index{
- Class MYClass = NSClassFromString(string);
- UIViewController *vc = [[MYClass alloc] init];
- vc.title = title;
- vc.tabBarItem.image = [UIImage imageNamed:imgStr];
- vc.tabBarItem.tag = index;
- if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {
- vc.tabBarItem.selectedImage = [[UIImage imageNamed:imageSelStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
- }
- return [[MYBaseNavController alloc] initWithRootViewController:vc];
- }
3
- //tabBar的方法
- - (void)tabBar:(nonnull UITabBar *)tabBar didSelectItem:(nonnull UITabBarItem *)item{
- NSInteger index = 0;
- for (UIView * subView in tabBar.subviews) {
- //判断是否是UITabBarButton
- if ([subView isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
- if (item.tag == index) {
- for (UIView *v in subView.subviews) {
- if ([v isKindOfClass:NSClassFromString(@"UITabBarSwappableImageView")]) {
- v.transform = CGAffineTransformMakeScale(0.6, 0.6);
- [UIView animateWithDuration:0.2 delay:0 usingSpringWithDamping:0.1 initialSpringVelocity:1 options: 0 animations:^{
- v.transform = CGAffineTransformIdentity;
- } completion:nil];
- }
- }
- }
- index++;
- }
- }
- }