0

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

编辑:对于动画,据说在动画期间的任何时候都无法确定对象的点——您提供的唯一可用信息是起点和终点

4

1 回答 1

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,您只需begincommit.

[UIView setAnimationCurve:UIViewAnimationCurveLinear];
于 2012-11-30T23:39:02.337 回答