zoukankan      html  css  js  c++  java
  • [NSConcreteValue doubleValue]: unrecognized selector sent to instance

    今天需求说要给在进入某个页面给某个按钮加上放大效果,心想这还不简单,于是三下五除二的把动画加上提交测试了.

    下面是动画的代码

        NSTimeInterval time = CACurrentMediaTime();
        time = time + 0.5;
        
        CAKeyframeAnimation *animation = [CAKeyframeAnimation  animationWithKeyPath:@"transform.scale"];
        
        //设置value
        CATransform3D scale1 = CATransform3DMakeScale(1.1, 1.1, 1);
        CATransform3D scale2 = CATransform3DMakeScale(1.0, 1.0, 1);
        animation.values = @[[NSValue valueWithCATransform3D:scale2],[NSValue valueWithCATransform3D:scale1],[NSValue valueWithCATransform3D:scale2]];
        
        //重复次数 默认为1
        animation.repeatCount = 1;
        //设置是否原路返回默认为NO
        animation.autoreverses = NO;
        animation.beginTime = time;
        animation.duration = 0.5;
        animation.keyTimes = @[@0.0,@0.7,@1];
        
        animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        //给这个view加上动画效果
        [view.layer addAnimation:animation forKey:@"transform.scale"];

    然而后面却出现了一个诡异的bug.当动画正在进行的时候滚动scrollView,则会崩溃,并且报下面的错误.

    [NSConcreteValue doubleValue]: unrecognized selector sent to instance

    上stackoverflow上发现解释如下,

    The transform.scale should be a double type, if you assign fromValue or toValue of CABasicAnimation a NSValue type, it cann't convert to double value, and so App crashed.

    翻译一下就是transform.scale应该用double类型的数值来赋值,如果用NSValue封装好的值来给fromValue和toValue赋值的话,则会解析不到对应的值,表现为app崩溃.

    于是修改代码如下,完美运行,不会崩溃了.

        NSTimeInterval time = CACurrentMediaTime();
        time = time + 0.5;
        
        //设置value
        CAKeyframeAnimation *animation = [CAKeyframeAnimation  animationWithKeyPath:@"transform.scale"];
        
        //设置value
        animation.values = @[@1,@1.1,@1];
        
        //重复次数 默认为1
        animation.repeatCount = 1;
        //设置是否原路返回默认为NO
        animation.autoreverses = NO;
        animation.beginTime = time;
        animation.duration = 0.5;
        animation.keyTimes = @[@0.0,@0.7,@1];
        
        animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        //给这个view加上动画效果
        [view.layer addAnimation:animation forKey:@"transform.scale"];
  • 相关阅读:
    学习总结------用JDBC连接MySQL
    MySQL基础语法------增删改查
    2、一、Introduction(入门):1、Application Fundamentals(应用程序基础)
    1、一、Introduction(入门): 0、Introduction to Android(引进到Android)
    小算法:合并两个有序数组,合并之后仍然有序
    小算法:求一个数的乘方
    标准SQL资料整理
    Android 4.0以上BlurMaskFilter效果无效
    Android反编译工具介绍与简单实用方法
    数据结构和算法笔记1 算法的定义,特性,设计要求
  • 原文地址:https://www.cnblogs.com/Caersi/p/9671228.html
Copyright © 2011-2022 走看看