iOS基本功

iOS TabBarController的几种动画效果的实现

2021-03-19  本文已影响0人  此时_此景

原理:利用UITabBarController实现,在tabbar的 didSelectItem 代理里添加动画效果。

@interface MainTabbarVC()@property (nonatomic,assign) NSInteger indexFlag;  //记录上一次点击tabbar,使用时,记得先在init或viewDidLoad里 初始化 = 0

@end

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{

    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.indexFlag = index;

    }

}

1、先放大,再缩小

//放大效果,并回到原位

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];

2、Z轴旋转

//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];

3、Y轴位移

//向上移动

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];

4、放大并保持

//放大效果

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];

    }

}

上一篇下一篇

猜你喜欢

热点阅读