Iphone UIView、animateWithDuration和beginFromCurrentState的问题

Iphone UIView、animateWithDuration和beginFromCurrentState的问题,iphone,objective-c,uiview,core-animation,Iphone,Objective C,Uiview,Core Animation,我有一个自定义视图,必须跟踪用户的位置。我将以下代码放入触摸开始,以及触摸移动: [UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ cursorView.center = locationOfTouch; } completion:^(BOOL finished){}]; [cursorView.layer removeAl

我有一个自定义视图,必须跟踪用户的位置。我将以下代码放入
触摸开始
,以及
触摸移动

[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
    cursorView.center = locationOfTouch;
} completion:^(BOOL finished){}];
[cursorView.layer removeAllAnimations];
对我来说,这似乎相当简单。我希望视图始终动画化到用户的当前位置,即使该位置已更改且视图仍在动画化(因为beginFromCurrentState选项)

然而,每一个动画都会完全结束。它们不会“过渡”到新动画,不,它们先完成,然后开始新动画

我尝试在
触摸移动中添加这一行:

[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
    cursorView.center = locationOfTouch;
} completion:^(BOOL finished){}];
[cursorView.layer removeAllAnimations];

什么都不做。没有动画被取消。有什么想法吗?

看起来这是我刚才回答的你问的另一个问题的衍生,但同样的想法也适用

您不需要使用块来执行此操作。只需在UIView动画中包装您的设置中心。像这样:

[UIView beginAnimations:nil context:NULL]
[UIView setAnimationDuration:0.2f];
cursorView.center = locationOfTouch;
[UIView commitAnimations];
请记住,0.2秒是相当快的。它可能看起来是“跳”到这个位置。要确认,请将持续时间设置为2.0秒,然后查看是否正在设置动画


致以最诚挚的问候。

[cursorView.layer removeAllAnimations]您可以访问视图的图层,但您没有将动画设置为图层,而是直接设置为视图。
尝试:


并省略
移除动画
,它应该从当前状态转换。

从技术上讲,视图应该自动设置动画,默认时间为0.25秒。这就是手册上说的,但是,我现在在这里,因为手册似乎不是非常准确的动画


此外,beginAnimations调用正在逐步取消,您可能希望使用CATTransaction来代替

是否有理由希望在每次调用touchesMoved时使用动画,而不是仅设置中心?是;我不希望视图“跳转”到触摸的位置。我希望它能顺利地为它制作动画。难道没有办法使用iOS4的块方法吗?我认为苹果公司建议不要使用
beginAnimations:context:
,因为iOS 4?我也这么认为,但即使是“UIViewAnimationOptionBeginFromCurrentState”的语法高亮显示也不适合我,所以我决定只使用块来制作简单的动画,而不使用fromCurrentState。(如果您决定支持iOS4之前的旧版本,则必须使用此方法)