【问题标题】:iOS: IBAction not called during animationiOS:动画期间未调用 IBAction
【发布时间】:2014-02-28 15:09:52
【问题描述】:

在我的应用程序中,我调用此方法来移动 UIButton

- (void) buttonMovement{

    [UIView animateWithDuration:0.8
                          delay:0.0
                        options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         // do whatever animation you want, e.g.,
                         play_bt.center = CGPointMake(play_bt.center.x, play_bt.center.y-20);
                     }
                     completion:NULL];
}

通过这种方式,我的按钮完成了“上下”运动,但如果我“按下”它,IBAction 将不起作用。如果我不做这个动画,它工作得很好。为什么? 如果这个动画是调用动作的问题,那么做一个不会给我带来问题的动画的方法是什么? 另一种方法是将按钮作为图像视图移动,然后我放置了一个不可见的按钮,但我失去了按下效果,它变成了所有噪音。

【问题讨论】:

  • 线程的标题是“动画期间未调用IBAction”,但是你粘贴了一个void方法?
  • 我写的是我的动画方法,它不是util show the IBAction,它没有被调用...
  • @nazz_areno 我认为这会有所帮助:stackoverflow.com/questions/20446966/…。使用 touches 开始而不是 IBAction。
  • 你的帖子一点都不清楚。 IBAction 方法在哪里? (您发布的代码是 void 方法,而不是 IBAction。)您是说在动画期间“飞行中”时无法单击按钮吗?还是说动画完成后不能点击?
  • 您不能在按钮在屏幕上移动时单击它们。可以检测动画对象上的点击,但它需要特殊代码来检查动画对象的表示层,以及 CALayer hitTest 方法。在动画完成之前,按钮 IBActions 永远不会对对象中心的“飞行中”动画起作用。

标签: ios objective-c uiviewanimation


【解决方案1】:

很多人在这里提供了错误的信息。我试着用 cmets 称重。现在是发布结论性答案的时候了。引用我对上面@Radu 链接的“clicking an animating image/button”问题的回答:

简短的回答是,您不能在动画制作时点击视图。原因是视图实际上并没有从开始位置移动到结束位置。相反,系统使用 Core Animation 中的“表示层”来创建视图对象移动/旋转/缩放/其他的外观。

您要做的是将点击手势识别器附加到完全包围动画(可能是整个屏幕)的包含视图,然后编写查看点击坐标的代码,进行坐标转换,并确定是否点击您关心的视图。如果点击一个按钮并且您希望该按钮突出显示,您也需要处理该逻辑。

我在 github 上有一个示例项目,它展示了当您使用 CABasicAnimation(它为图层而不是视图设置动画)同时执行 UIView 动画和核心动画时如何执行此操作。

Core Animation demo with hit testing

【讨论】:

  • 是的,@Radu 链接终于解决了我的问题,也感谢您提供的示例
【解决方案2】:

一种解决方法是为您的动画按钮实现 touchesBegan 而不是 IBAction。

您可能想查看这里给出的答案:Clicking an animating image / button

- (void)touchesBegan:(NSSet*) touches withEvent:(UIEvent *) event{

    // Get location of touched point
    CGPoint point = [[touches anyObject] locationInView:self.view];

    //
    // Check if point is inside your button frame
    // or compare it with the presentation layer
    //

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多