iphone - 是否有可能成功地为移动的 UIButton 制作动画?

标签 iphone objective-c animation core-animation uibutton

我正在尝试为在屏幕上移动的按钮设置动画。用户可以随时按下按钮。但按钮不响应触摸。我尝试过动画 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/

相关文章:

javascript - 使用 easeljs pan 的 HTML5 Canvas

jquery - 无法在 jquery 中链接动画

iphone - 适用于 iOS 的 ARC 兼容图表框架

ios - 如何在4英寸屏幕的iOS6上设置viewcontroller背景图片

iphone - 未找到 i386 架构的符号?

html - CSS3 Perspective() 动画在鼠标快速移动时表现得很奇怪

iphone - 如何从 iPhone 应用程序中的 URL 读取 .rtf 文件

objective-c - 解析 Objective C 错误中的 JSON 值?

ios - 使用 block 的 Sprite-kit Action

objective-c - 如何使状态项在单击时显示或隐藏窗口?