我已将动画图像从屏幕顶部直接拖到底部,我希望能够确定图像到达屏幕上某个点所需的时间。通常,通过将所需点的y坐标乘以动画的持续时间,然后将其除以图像从开始到结束移动的总像素数,可以很容易地做到这一点。然而,objective-c动画在停止之前开始缓慢,加速,然后减速 - 这意味着我无法使用此方法来计算所需的时间。那么有什么方法可以确定一个向下移动的动画到达某个地方的时间吗?
编辑:使用动画,据说在动画过程中无法确定任何点上的对象点 - 您提供的唯一可用信息是起点和终点
答案 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];