UIView内部的UIButton在UIView动画后无法正常工作

tha*_*oru 11 objective-c uibutton uiviewanimation

我在这个论坛上看到很多问题给出了这个主题的答案"当UIView内部的UIButton,当动画不起作用时",但是在尝试了像这样的答案之后

a) UIViewAnimationOptionAllowUserInteraction to the options
b) subView.setUserInteractionEnabled = YES
c) [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

他们都没有为我工作:-(

这是场景.App处于横向模式,名为menuView的UIView位于x = 480,y = 0.它的高度= 200,宽度= 150.因此,当我点击右上角的按钮时,将执行以下代码

- (IBAction)showMenu {
    [menuView setUserInteractionEnabled:YES];
    [optionsButton setUserInteractionEnabled:YES];
    [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationCurveEaseOut |  UIViewAnimationOptionAllowUserInteraction
                     animations:^{
                         self.view.frame = CGRectOffset(self.view.frame, 0, 200);
                     }
                     completion:NULL];
}
Run Code Online (Sandbox Code Playgroud)

输出?:视图正在显示,但menuView中的optionsButton无法点击.我联系了一个事件,做了一个NSLog(@"选项按钮点击"),但没有任何反应:-(

请告诉我我做错了什么?

更新:当我在self.view中放置"menuView"子视图时,然后在运行并单击optionsButton时,我得到NSLog消息.只有当我将menuView的origin.x指定为480及以上时,它才会起作用.

dan*_*ndi 26

如果您可以看到UIButton,则会设置其userInteractionEnabled(默认情况下为YES!),并且整个层次结构中的superview的userInteractionEnabled为YES - 您应该能够与它进行交互.

动画永远不会改变你的userInteractionEnabled属性!所以你在那里做的事情根本就没有必要.如果您尝试动画期间启用交互- 这是一个不同的故事,只是传递给动画消息的选项.

所以,如果这不是你的问题(可能不是),那么我猜其中一个superview的框架正在裁剪UIButton!

现在你看,如果一个UIButton(或任何UIView)在UIView的框架之外,它仍然是可见的,除非在superview上设置了clipsToBounds.

那种情况的结果是:你可以看到我,但你不能碰我.

  • 是的,这是有道理的.我不知道menuView是否是self.view的子视图,以及确切的度量是什么,但NSLogging视图自身,以及它们的子视图数组和superview属性,可以给出完整的图片.无论如何 - 你看到唯一(简单)可能的解释,是有效的.你的UIButton超出界限.我不知道哪个视图的界限,但仍然:-) (2认同)

Dan*_*ney 7

在我的情况下,缺少对包含视图高度的约束导致视图高度为0.按钮在视图下方可见,但不可触及.