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

时间:2013-03-03 09:02:10

标签: objective-c uibutton uiviewanimation

我在这个论坛上看到了许多问题,这个问题回答了这个主题“UIVutton里面的UIVutton,当动画不起作用时”,但是在尝试了像

这样的答案之后
a) UIViewAnimationOptionAllowUserInteraction to the options
b) subView.setUserInteractionEnabled = YES
c) [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];

他们都不适合我: - (

以下是该方案。 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];
}

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

请告诉我我做错了什么?

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

4 个答案:

答案 0 :(得分:26)

如果您可以看到 UIButton ,则会设置其 userInteractionEnabled (默认为YES!),并在整个层次结构中设置其superview的 userInteractionEnabled 是的 - 您应该能够与之互动。

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

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

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:2)

对我来说,这完全是关于动画代码本身的一个被忽视的错误。在我的新高度被调用的地方,我实际上正在调用我的新宽度,并且在我的新宽度被调用的地方,我实际上正在调用我的新高度,因此导致UIView超长且超窄,从而推动了中心内的所有内容在视野范围之外的视野。

  • 将您的UIViews背景颜色更改为红色,以便您可以实际看到它的动画效果。

  • 如果您的UIView在另一个视图中,请启用clipSubviews,这样您才能看到subView中实际启用的内容。

  • 运行您的项目。

如果你的UIView不是正常的高度和宽度,你很可能忽略了动画调用中的一些代码。

确保您的x, y, width, height在动画代码中以正确的顺序显示。

答案 3 :(得分:1)

就我而言,似乎我的动画过渡尚未完成。我忘了将completeTransition:Bool放在animateTransition:context方法的末尾。