为自定义属性的值设置动画?

时间:2014-04-03 23:52:06

标签: ios objective-c

我可以轻松制作像UIView的positionsize之类的动画。但是我怎样才能制作一个定制的#34;变量(例如experiencePoints)以实现与UIView相关联的 not 值的插值。

// The variable being animated
CGFloat experiencePoints = 0;

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

使用此代码,如果我在设置动画时访问experiencePoints,我会根据动画的持续时间获得0200之间的值。

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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;

答案 2 :(得分:-1)

"动画效果"有些东西只是随着时间的推移将值从起始位置移动到结束位置。为了#34;动画"在一段时间内从一个值浮动到另一个值,您可以只运行一个计时器并逐步更改它。或者你可以存储"动画的开始和结束时间"每当访问该值时,将它们与实际时间进行比较,得出一个值。