我有一个自定义视图,必须跟踪用户的位置。我将以下代码放在touchesBegan
以及touchesMoved
:
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
cursorView.center = locationOfTouch;
} completion:^(BOOL finished){}];
对我而言,这似乎相当简单。我希望视图始终为用户的当前位置设置动画,即使该位置已更改且视图仍为动画(因为beginFromCurrentState选项)。
然而,每部动画都完成了。他们没有“过渡”到新动画,没有先完成,然后他们开始新动画。
我尝试在touchesMoved
中添加此行:
[cursorView.layer removeAllAnimations];
什么都不做。没有动画被取消。有什么想法吗?
答案 0 :(得分:2)
使用[cursorView.layer removeAllAnimations];
您可以访问视图图层,但您已将动画设置为不是图层而是直接设置视图。
尝试:
[UIView beginAnimations:nil context:NULL]
[UIView setAnimationDuration:0.2];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
cursorView.center = locationOfTouch;
[UIView commitAnimations];
并忽略removeAllAnimations
,它应该从当前状态转换。
答案 1 :(得分:0)
看起来这是你刚才回答的另一个问题的衍生物,但同样的想法适用。
您无需使用块来执行此操作。只需将您的setCenter包装在UIView动画中即可。像这样:
[UIView beginAnimations:nil context:NULL]
[UIView setAnimationDuration:0.2f];
cursorView.center = locationOfTouch;
[UIView commitAnimations];
请记住,0.2秒非常快。它可能出现以“跳跃”到该位置。要确认,请将持续时间设置为2.0秒,然后查看它是否为动画。
最好的问候。
答案 2 :(得分:0)
从技术上讲,视图应使用默认时间0.25秒自动设置动画。这就是手册所说的,但是,我现在正在这里,因为关于动画的手册似乎不太准确。
此外,beginAnimations调用正在逐步取消,您可能希望使用CATransaction