2014-04-03 75 views
1

我可以很容易地创建一个类似于UIView的positionsize的动画。但是,如何为“自定义”变量(如experiencePoints)设置动画效果,以实现与UIView关联的而不是的插值。动画自定义属性的值?

// The variable being animated 
CGFloat experiencePoints = 0; 

// Pseudo-code 
[experiencePoints animateTo:200 duration:2 timingFunction:someTimingFunction]; 

有了这个代码,如果我访问experiencePoints,而这是动画,我将根据多久动画已经持续得到0200之间的值。

奖金问题:是否可以使用CAAnimation来做我想要的?

+1

简短的回答是你不能。无论如何,通过动画化物业的价值,你甚至意味着什么?你的意思是它在标签或其他UI元素中的值的字符串表示形式吗?要做到这一点的唯一方法是使用计时器递增值或递归调用显示该值的方法。 – rdelmar

+1

您可以为自定义CALayer属性执行此操作。感兴趣吗? –

回答

0

结束使用Facebook's POP animation library,它允许动画对象上的任何属性。我推荐它!

下面是从自述报价,说明如何做到这一点:

该框架提供了许多公共层和查看动画的属性出框。您可以通过创建类的新实例来创建自定义属性的动画。在这个例子中,我们声明了一个自定义卷属性:

prop = [POPAnimatableProperty propertyWithName:@"com.foo.radio.volume" initializer:^(POPMutableAnimatableProperty *prop) { 
    // read value 
    prop.readBlock = ^(id obj, CGFloat values[]) { 
    values[0] = [obj volume]; 
    }; 
    // write value 
    prop.writeBlock = ^(id obj, const CGFloat values[]) { 
    [obj setVolume:values[0]]; 
    }; 
    // dynamics threshold 
     prop.threshold = 0.01; 
    }]; 

anim.property = prop; 
+1

如果你能详细说明这一点,那将会很棒。 –

-1

“动画”的意思是简单地将一个值从开始位置移动到结束位置。要在一段时间内将浮动值从一个值“动画”到另一个值,您可以运行一个计时器并逐步更改它。或者可能你可以存储“动画”的开始和结束时间,并且每当访问该值时,将这些值与实际时间进行比较以得到一个值。

0

您可以使用带有CADisplayLink的表示层,并通过在动画状态中添加观察者,您可以将变量增加到最后一个。观察者将观察动画的当前状态,这将最终为您提供获取该VAR的当前值的方法。