给tabBarItem加点击效果动画
获取到tabBarItem,添加喜欢的动画
.h文件
@interface JGTabBarController () //记录上一次点击tabbar @property (nonatomic, assign) NSInteger indexFlag; @end
.m文件
①先放大,再缩小;②Z轴旋转 ;③向上移动;④放大并保持
@implementation JGTabBarController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.indexFlag = 0; } #pragma mark - UITabBarDelegate - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { /** 给 tabBarButton 加动画 */ NSInteger index = [self.tabBar.items indexOfObject:item]; if (index != self.indexFlag) { //执行动画 NSMutableArray *arry = [NSMutableArray array]; for (UIView *btn in self.tabBar.subviews) { if ([btn isKindOfClass:NSClassFromString(@"UITabBarButton")]) { [arry addObject:btn]; } } //添加动画 [self addUpTranslationAnimtaionWithArr:arry index:index]; self.indexFlag = index; } } #pragma mark - More Animation /// 先放大,再缩小 - (void)addScaleAnimtaionWithArr:(NSMutableArray *)arry index:(NSInteger)index { //放大效果,并回到原位 CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; //速度控制函数,控制动画运行的节奏 animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; animation.duration = 0.2; //执行时间 animation.repeatCount = 1; //执行次数 animation.autoreverses = YES; //完成动画后会回到执行动画之前的状态 animation.fromValue = [NSNumber numberWithFloat:0.7]; //初始伸缩倍数 animation.toValue = [NSNumber numberWithFloat:1.3]; //结束伸缩倍数 [[arry[index] layer] addAnimation:animation forKey:nil]; } /// Z轴旋转 - (void)addRotationAnimtaionWithArr:(NSMutableArray *)arry index:(NSInteger)index { //z轴旋转180度 CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; //速度控制函数,控制动画运行的节奏 animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; animation.duration = 0.2; //执行时间 animation.repeatCount = 1; //执行次数 animation.removedOnCompletion = YES; animation.fromValue = [NSNumber numberWithFloat:0]; //初始伸缩倍数 animation.toValue = [NSNumber numberWithFloat:M_PI]; //结束伸缩倍数 [[arry[index] layer] addAnimation:animation forKey:nil]; } /// 向上移动 - (void)addUpTranslationAnimtaionWithArr:(NSMutableArray *)arry index:(NSInteger)index { //向上移动 CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"]; //速度控制函数,控制动画运行的节奏 animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; animation.duration = 0.2; //执行时间 animation.repeatCount = 1; //执行次数 animation.removedOnCompletion = YES; animation.fromValue = [NSNumber numberWithFloat:0]; //初始伸缩倍数 animation.toValue = [NSNumber numberWithFloat:-10]; //结束伸缩倍数 [[arry[index] layer] addAnimation:animation forKey:nil]; } /// 放大并保持 - (void)addscaleAndKeepAnimtaionWithArr:(NSMutableArray *)arry index:(NSInteger)index { //放大效果 CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; //速度控制函数,控制动画运行的节奏 animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; animation.duration = 0.2; //执行时间 animation.repeatCount = 1; //执行次数 animation.removedOnCompletion = NO; animation.fillMode = kCAFillModeForwards; //保证动画效果延续 animation.fromValue = [NSNumber numberWithFloat:1.0]; //初始伸缩倍数 animation.toValue = [NSNumber numberWithFloat:1.15]; //结束伸缩倍数 [[arry[index] layer] addAnimation:animation forKey:nil]; //移除其他tabbar的动画 for (int i = 0; i<arry.count; i++) { if (i != index) { [[arry[i] layer] removeAllAnimations]; } } }
@end
UITabbarItem自定义 先放大再复原
//添加动画 - (void)cusTabbarItemAddAnimationWithBtn:(UIButton *)btn { CABasicAnimation*pulse = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; pulse.timingFunction= [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; pulse.duration = 0.2; pulse.repeatCount= 1; pulse.autoreverses= YES; pulse.fromValue= [NSNumber numberWithFloat:0.7]; pulse.toValue= [NSNumber numberWithFloat:1.3]; [btn.layer addAnimation:pulse forKey:nil]; }