这是我移动玩家的方法(又名ball
与label
同步):
int x2 = self.ball.frame.origin.x;
int y2 = self.ball.frame.origin.y;
double distance = sqrt(pow((x2 - coords.x), 2.0) + pow((y2 - coords.y), 2.0));
// 140 is just an arbitrary multiplier
NSTimeInterval time = distance / 140;
animating = YES;
[UIView animateWithDuration:time delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
[self.ball setFrame:CGRectMake(coords.x, coords.y, 48, 48)];
[self.label setFrame:CGRectMake(coords.x - 30, coords.y - 25, 108, 20)];
} completion:^(BOOL finished) {
animating = NO;
}];
此代码只需轻轻一按即可,但是当玩家重定向他的移动(在动画时触摸其他地方,因此UIViewAnimationOptionBeginFromCurrentState
)时,距离是错误的。这是因为帧被设置为第一次触摸的结束点,而不是动画结束的位置。
答案 0 :(得分:0)
您可能希望从对象layer.presentationLayer属性中获取起始帧位置。 文档说:
此方法返回的图层对象提供了关闭 当前正在屏幕上显示的图层的近似值。 当动画正在进行时,您可以检索此对象和 用它来获取这些动画的当前值。