我正在尝试为在屏幕上移动的按钮设置动画。用户可以随时按下按钮。但按钮不响应触摸。我尝试过动画 block ,但按钮只是立即移动到其结束坐标,而框架显示动画(按钮称为气泡):
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:5.0];
CGAffineTransform newTransform = CGAffineTransformMakeScale(3, 3);
bubble.transform = CGAffineTransformTranslate(newTransform, 0, -460);
[UIView commitAnimations];
然后我在一些示例代码的帮助下尝试了核心动画(路径并不重要,它只是一个示例):
CGMutablePathRef thePath = CGPathCreateMutable();
CGPathMoveToPoint(thePath,NULL,15.0f,15.f);
CGPathAddCurveToPoint(thePath,NULL,
15.f,250.0f,
295.0f,250.0f,
295.0f,15.0f);
CAKeyframeAnimation *theAnimation=[CAKeyframeAnimation animationWithKeyPath:@"position"];
theAnimation.path=thePath;
CAAnimationGroup *theGroup = [CAAnimationGroup animation];
theGroup.animations=[NSArray arrayWithObject:theAnimation];
theGroup.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
theGroup.duration=15.0;
CFRelease(thePath);
[bubble.layer addAnimation:theGroup forKey:@"animatePosition"];
但是按钮仍然不响应触摸。顺便说一句,我在屏幕上同时显示了几个“气泡”按钮,因此同时激活多个 NSTimer 并不是最佳选择。
有人可以建议另一种方法吗?我应该为 UIImageViews 设置动画并让它们响应触摸吗?或者我也会遇到同样的问题吗?这让我困惑了几天,所以非常感谢任何帮助。
谢谢:)
迈克尔
最佳答案
当对 UIButton 等 GUI 元素进行动画处理时,实际位置仅在动画完成时发生变化。这意味着动画期间的任何触摸事件只会在按钮的起始点起作用。您可以通过访问按钮的presentationLayer 来获取按钮的当前显示位置。您可能需要实现自己的事件处理,查看用户触摸屏幕时的位置,并将其与从presentationLayer 获得的边界进行比较。
关于iphone - 是否有可能成功地为移动的 UIButton 制作动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3568868/