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之前的旧版本,则必须使用此方法)