11

我在这个论坛上看到了很多问题,这些问题给出了这个主题的答案“UIView 中的 UIButton,当动画不起作用时”,但是在尝试了类似的答案之后

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

他们都不为我工作:-(

这是场景。应用程序处于横向模式,名为 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(@"Options button clicked"),但什么也没发生:-(

请告诉我我做错了什么?

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

4

4 回答 4

29

如果您可以看到UIButton,则它的userInteractionEnabled(默认为 YES!)已设置,并且其父视图在整个层次结构中的userInteractionEnabled为 YES - 您应该能够与它进行交互。

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

因此,如果这不是您的问题(并且可能不是),那么我猜超级视图的一个框架正在裁剪UIButton

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

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

于 2013-03-03T12:06:31.793 回答
8

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

于 2013-11-27T19:38:19.050 回答
2

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

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

  • 如果您的 UIView 在另一个视图中,请打开clipSubviews以便您只能看到subView.

  • 运行你的项目。

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

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

于 2016-06-01T14:54:38.567 回答
1

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

于 2015-08-03T06:53:53.240 回答