我查看了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,strong
和nonamatic
编辑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");
}
}
但是当按下按钮时,仍然没有发生任何事情......所以我该如何编程^^^^
答案 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)
我发现了问题。约束阻止我与按钮交互。当我从按钮中删除以编程方式编写的约束时,它工作正常。