确定向下移动的动画到达某个地点所需的时间

时间:2012-11-30 23:10:32

标签: iphone objective-c xcode

我已将动画图像从屏幕顶部直接拖到底部,我希望能够确定图像到达屏幕上某个点所需的时间。通常,通过将所需点的y坐标乘以动画的持续时间,然后将其除以图像从开始到结束移动的总像素数,可以很容易地做到这一点。然而,objective-c动画在停止之前开始缓慢,加速,然后减速 - 这意味着我无法使用此方法来计算所需的时间。那么有什么方法可以确定一个向下移动的动画到达某个地方的时间吗?

编辑:使用动画,据说在动画过程中无法确定任何点上的对象点 - 您提供的唯一可用信息是起点和终点

1 个答案:

答案 0 :(得分:1)

如果您使用的是animateWithDuration:delay:options:animations:completion:,则可以将options参数设置为UIViewAnimationOptionCurveLinear。默认情况下有一个时髦的曲线,但UIViewAnimationOptionCurveLinear就是它的声音;线性的。没有加速,没有减速。此外,是的,有一种方法可以访问动画视图的位置。您可以访问其表示层(用于显示动画的图层)并使用框架的位置。

编辑:这是一个基于块的动画示例,它使用毕达哥拉斯定理计算从视图到目的地的距离,并使用线性曲线将视图动画到目的地。

    UIView* view = [[UIView alloc] init];
    CGPoint destination = CGPointZero;
    [UIView animateWithDuration: sqrt(pow(view.frame.origin.x - destination.x, 2) + pow(view.frame.origin.y - destination.y, 2)) / pixelsPerSecondVelocity
                          delay: 0
                        options: UIViewAnimationOptionCurveLinear
                     animations:^(void) {
                         view.frame = CGRectMake(destination.x,destination.y,view.frame.size.width,view.frame.size.height);
                     }
                     completion:^(BOOL finished) {
                         // nothing
                     }];

如果您定位到iOS 4以下,则可以在begin之后但commit之前添加以下代码。

[UIView setAnimationCurve:UIViewAnimationCurveLinear];