将UIView设置为没有指定持续时间的值的动画

时间:2011-02-03 16:30:37

标签: ios core-animation duration

我想使用Core Animation为子类UIView制作动画。在我的情况下奇怪的是,我希望动画每帧运行一个固定的数量而不是持续时间。所以动画从100 - > 200应该花费超过100 - > 50,但视图的“速度”应该是恒定的。我的代码目前看起来像这样:

CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
animation.duration = 0.4;

[[self layer] addAnimation:animation forKey:@"transform"];

self.transform = CGAffineTransformMakeTranslation(0, 100);
这可能吗?怎么做?

1 个答案:

答案 0 :(得分:1)

为什么不从所需的运动中计算出所需的时间?类似的东西:

CGFloat distanceToTimeFactor = 0.1;
CGPoint current = self.center;
CGPoint new = CGPointMake(100,100);

CGFloat xDist = (new.x - current.x);
CGFloat yDist = (new.y - current.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));

CGFloat duration = distance * distanceToTimeFactor;

然后使用该持续时间制作动画。