用屏幕点击停止 UIView 动画
Posted
技术标签:
【中文标题】用屏幕点击停止 UIView 动画【英文标题】:Stop UIView animations with screen taps 【发布时间】:2014-11-24 20:37:36 【问题描述】:我已经启动了一个新的 ios 应用程序,但我的代码有问题。 关于应用程序的描述:在屏幕中间放置了一个圆圈,当我点击屏幕时,圆圈开始移动到我点击那里的点。 我已经对其进行了编程并且它的工作非常好,但是还有一件事:当我点击屏幕上的另一个点时,圆圈会在我点击后立即移动到第二个点! - 即使圆圈仍然移动到第一个点,他会立即开始移动到第二个点。 (这是最难的部分)。
这是我点击屏幕时的代码:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
[self.view.layer removeAllAnimations];
UITouch *myTouch = [[touches allObjects] objectAtIndex: 0];
CGPoint currentPos = [myTouch locationInView: self.view];
[UIView animateWithDuration:2
delay:0.0f
options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
animations:^()
circle.center = CGPointMake(currentPos.x, currentPos.y);
completion:^(BOOL finished)];
请帮我解决这个问题。也许还有另一种方法可以让那个圆圈或在点击屏幕时动画化。
即使您可以提供代码,当我按下按钮时,圆圈会停止并且不会在我按下按钮时的位置向右移动 - (即使圆圈处于动画状态)所以它会是伟大的.. 谢谢。
【问题讨论】:
【参考方案1】:据我所知,UIViewAnimation 中没有引用任何值来保存动画的当前中心,因此您需要编写自己的动画算法。
关于“停止圆圈”的问题是圆圈位置没有记录在UIViewAnimation内部我们可以访问的任何地方。为了了解我的意思,请尝试NSLog()
circle.center
点,您会看到当您点击屏幕时,circle.center
的值将永远不会改变,直到您移动您在屏幕上点击的位置。 (即使它不断移动,circle.center
CGPoint 也不会改变)
这意味着动画几乎立即设置圆心,当动画“停止”时,它不会停止在原处,而是在动画开始时设置圆心时停止。
我知道这不是您想听到的,但要按照您喜欢的方式制作此程序,工作量将超出您的预期。我不熟悉 Core Animation 中的自定义动画,但这里有一些链接可以帮助您入门。
A question similar to yours on another website.
How to find offsets between two points (In your case the starting animation and ending)
您还需要阅读毕达哥拉斯理论和NSTimeInterval
,以便计算动画所在的当前位置。
【讨论】:
我想你不明白我的意思,你知道吗?即使您可以提供代码,当我按下按钮时,圆圈就会停止并且不会在我按下按钮时的位置向右移动 - (即使圆圈处于动画状态)所以它会很棒.. @Nir 我理解的方式是您希望圆圈完成动画,直到您可以再次点击以在新位置制作圆圈。对吗? 圆圈只是屏幕上的一个角色/对象,接下来是我的动画动作。 @Nir 我理解那部分。您是否希望圆圈在下一次点击可以注册/动画之前完成动画? 不,圆圈不需要完成第一个动画,他需要立即运行第二个动画..以上是关于用屏幕点击停止 UIView 动画的主要内容,如果未能解决你的问题,请参考以下文章