我在这个论坛上看到了许多问题,这个问题回答了这个主题“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及以上时,它才会起作用。
答案 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
方法的末尾。