无法触摸动画UIButton时

时间:2014-10-23 00:12:20

标签: ios objective-c uibutton

我查看了UIButton can't be touched while animated with UIView animateWithDuration,答案对我没有帮助。

for (UIButton *button in self.buttonsOutletCollection)

这部分令人困惑。我的按钮不是IBOutletCollection的一部分,所以这不起作用。我用它来移动按钮:

- (void) squareOneMover {
    CGRect oldFrame = _squareOne.frame;
    [UIView animateWithDuration:2
                          delay:0.0
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:^{
                         CGRect newFrame = CGRectMake(oldFrame.origin.x , oldFrame.origin.y + 500, oldFrame.size.width, oldFrame.size.height);
                         _squareOne.frame = newFrame;
                     }
                     completion:nil
    ];
}

我不想要少量移动Button,因为我需要五个按钮,效率很低。

有人能否为我提供类似于上述问题的答案,UIButtons不包含在任何数组中?

编辑: UIButton在接口文件中定义并连接到Interface Builder,strongnonamatic

编辑2:我现在正在使用animateWithDuration:delay:options:animations:completion:,但它仍然无效。

我使用此代码检测按钮是否被按下。

- (void)squareOnePressed:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];
    if ([self.squareOne.layer.presentationLayer hitTest:touchLocation])
    {
        NSLog(@"YO");
    }
}

但是当按下按钮时,仍然没有发生任何事情......所以我该如何编程^^^^

3 个答案:

答案 0 :(得分:2)

尝试在options参数中使用animateWithDuration:delay:options:animations:completion:调用UIViewAnimationOptionAllowUserInteraction

将IBAction添加到视图控制器并将按钮连接到该控制器。将NSLog放入IBAction方法中。 (你知道怎么做吗?)

答案 1 :(得分:0)

为什么您的方法名为squareOneTouched:?你的IBAction触发了吗?

如果您要继承UIViewController,则应该覆盖touchesBegan:方法。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];
    if ([self.squareOne.layer.presentationLayer hitTest:touchLocation])
    {
        // This button was hit whilst moving - do something with it here
        NSLog(@"YO");
    }
}

答案 2 :(得分:0)

我发现了问题。约束阻止我与按钮交互。当我从按钮中删除以编程方式编写的约束时,它工作正常。