动画移动 UIButton 在移动时不响应触摸/点击

Posted

技术标签:

【中文标题】动画移动 UIButton 在移动时不响应触摸/点击【英文标题】:Animated moving UIButton not responding to touches/taps while moving 【发布时间】:2010-08-23 12:28:17 【问题描述】:

我正在尝试为 UIButton 设置动画以向上移动屏幕。用户可以随时触摸它。但是,它似乎在移动时不会响应触摸,仅在其动画的开始和结束时响应。我想这是因为按钮本身没有移动,只是它的图像。有什么想法可以解决这个问题吗?到目前为止,这是我的代码。谢谢!

- (void)viewDidLoad 
    [self newBubble];
    [super viewDidLoad];


- (void)newBubble 
    UIButton *bubble = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
    bubble.frame = CGRectMake(10, 380, 50, 50);
    UIImage *bubbleImage = [UIImage imageNamed:@"bubble.png"];
    [bubble setBackgroundImage:bubbleImage forState:UIControlStateNormal];
    bubble.imageView.contentMode = UIViewContentModeScaleAspectFit;
    [bubble addTarget:self action:@selector(bubbleBurst:) forControlEvents:UIControlEventTouchDown];
    [self.view addSubview:bubble];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:5.0];
    CGAffineTransform newTransform = CGAffineTransformMakeScale(1.5, 1.5);
    bubble.transform = CGAffineTransformTranslate(newTransform, 10, -200);
    [UIView commitAnimations];


- (IBAction)bubbleBurst:(id)sender 
    NSLog(@"Bubble burst");
    UIButton *bubbleBurst = sender;
    [bubbleBurst removeFromSuperview];

【问题讨论】:

【参考方案1】:

+[UIView animateWithDuration:delay:options:animations:completion:] 方法采用 UIViewAnimationOptions 参数。如果你包含UIViewAnimationOptionAllowUserInteraction,你应该能够在它动画时按下按钮:

    [UIView animateWithDuration:5.0
                      delay:0.0
                    options:UIViewAnimationOptionAllowUserInteraction
                 animations:^
        CGAffineTransform newTransform = CGAffineTransformMakeScale(1.5, 1.5);
        bubble.transform = CGAffineTransformTranslate(newTransform, 10, -200);
     completion:nil];

【讨论】:

【参考方案2】:

好吧,在发布了类似的问题后,我找到了answer here

基本上,您必须使用 NSTimer 逐帧移动按钮。在我的情况下,我担心移动每个按钮会涉及到太多的 NSTimers,但最后我使用了一个计时器,它循环遍历一组按钮并一个一个地移动它们。

【讨论】:

【参考方案3】:

如果您希望按钮在移动时响应触摸,我很确定您必须使用 Core Animation,但我从未这样做过,所以这实际上更像是一个提示而不是一个答案!

【讨论】:

确实,我希望你是对的。知道要使用哪些类吗?我尝试了 CAKeyframeAnimation,移动了图层的“位置”属性,但同样的问题。与 CABasicAnimation 一样。我会坚持下去,只是希望有人能早点给我指点?也许我应该使用 NSTimer 更新按钮的位置?但是,如果有多个按钮,这会变得非常混乱......【参考方案4】:

我同意。我认为问题在于您没有使用核心动画。我不敢相信你自己也想不通。

【讨论】:

好吧,如果您需要一个 iPhone 应用程序,您就知道该去哪里了。前提是它不使用核心动画:)

以上是关于动画移动 UIButton 在移动时不响应触摸/点击的主要内容,如果未能解决你的问题,请参考以下文章

可移动的 UIButtons

使用 CABasicAnimation 旋转的 UIButton 不会移动初始触摸坐标

iPhone:移动没有动画的 UIButton

UIButton移动动画

触摸移动触发时css过渡不一致

动画 UIView 的内容未接收到触摸事件