UIButton在动画后没有响应

我希望首先从下面的链接下载该项目,然后继续问题 (仅36kb)

下载链接

一开始,我的情况如下。

在此处输入图像描述

当我单击My Office按钮时,我正在调用action actionSeenButton ,它将打印NSLog(@"actionSeenButton");

 - (IBAction)actionSeenButton:(id)sender { NSLog(@"actionSeenButton"); } 

这很完美。

当我点击显示隐藏按钮时,我按100滑动视图并显示我顶部的图像和按钮,如下图所示

在此处输入图像描述

使用的代码是

 - (IBAction)showHiddenButton:(id)sender { CGAffineTransform translation = CGAffineTransformIdentity; translation = CGAffineTransformMakeTranslation(0, 100); [UIView beginAnimations:nil context:nil]; self.view.transform = translation; [UIView commitAnimations]; } 

当我单击此按钮时,我调用action actionHiddenButton将打印NSLog(@"actionHiddenButton");

 - (IBAction)actionHiddenButton:(id)sender { NSLog(@"actionHiddenButton"); } 

但问题是,当我点击我看到的新按钮时,动作不会被调用。

知道为什么会这样吗?


注意

当我将顶部隐藏按钮从y = -70移动到y = 170时,动作将被调用。

示例项目可以从这里下载

我想要实现的是,通过向下移动视图,在一行的顶部显示三个按钮(如菜单)。

确认您的按钮不在另一个视图的框架后面。 即使按钮是可见的,如果有东西覆盖它,它也不会工作。 我目前无法访问xcode,但我的猜测是你的视图“堆栈”禁止你与按钮交互。 一个按钮只是一个uiview,您可以对可以使用视图的按钮和标签执行所有相同的动画。 您最好的选择是将视图留在后台,只需移动按钮即可。 因为你的“隐藏”按钮不是主要“视图”的主要部分,这就是你的问题所在。

经过进一步调查,您的问题与自动布局有关,并确保您的按钮对象保持在视图层次结构中。 如果您关闭自动布局,您将看到问题所在。 当您为主视图设置动画时,“隐藏”按钮不在视图中,并且处于非活动状态。 最简单的解决方案是只为按钮设置动画。 最接近你所拥有的最佳解决方案是在“主视图”上添加另一个视图,然后将按钮放入该视图中。 为什么你有两次这样的背景图像? 为什么不将视图的背景颜色设置为相同的黄色?

我下载了你的项目,看起来你正在为self.view做翻译。 因此actionHiddenButton不在框架中。最好让您想要在单独视图中设置动画。
如果要查看问题,请在视图转换clipsToBounds设置为YES 。 喜欢

  self.view.transform = translation; self.view.clipsToBounds = YES; 

Yipeee! 以下是我的表现。

。H

添加了新变量。

 @property (retain, nonatomic) NSString *hideStatus; 

.M

 -(void) viewDidAppear:(BOOL)animated { NSLog(@"viewDidAppear"); CGAffineTransform translation = CGAffineTransformIdentity; translation = CGAffineTransformMakeTranslation(0, -100); self.view.transform = translation; self.view.clipsToBounds = YES; [UIView commitAnimations]; self.view.frame = CGRectMake(0,-80,320,560); hideStatus = @"hidden"; } - (IBAction)showHiddenButton:(id)sender { NSLog(@"hideStatus===%@", hideStatus); CGAffineTransform translation = CGAffineTransformIdentity; if ([hideStatus isEqualToString:@"hidden"]) { translation = CGAffineTransformMakeTranslation(0, 0); hideStatus = @"shown"; } else { translation = CGAffineTransformMakeTranslation(0, -100); hideStatus = @"hidden"; } [UIView beginAnimations:nil context:nil]; self.view.transform = translation; self.view.clipsToBounds = YES; [UIView commitAnimations]; } 

附件是示例项目。 你可以从这里下载。