zoukankan      html  css  js  c++  java
  • 给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];
    }
  • 相关阅读:
    SDK Manager.exe和AVD Manager.exe缺失,Android SDK Tools在检查java环境时卡住了,未响应卡死!
    GetLastError结果列表
    VS2008 远程调试器未成功安装,没法使用?
    远程桌面连接无法相互拷贝文件了?
    VS2008编译错误:error C2065: 'PMIB_TCPSTATS' : undeclared identifier c:program files (x86)microsoft sdkswindowsv7.0aincludeiphlpapi.h 411
    C++ 保存Excel文件(带密码保护)
    UTF8与std:string互转
    将windbg设置为默认调试器命令
    VC++ 链接错误LINK : fatal error LNK1104: cannot open file "*.lib"
    IAP升级程序中Bootloader和APP程序中断复用的解决办法
  • 原文地址:https://www.cnblogs.com/GJ-ios/p/10642310.html
Copyright © 2011-2022 走看看