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]; }
附件是示例项目。 你可以从这里下载。