我更愿意先从下方链接下载该项目,然后继续问题(仅36kb)
开始时,我的情况如下所示。
当我点击“我的办公室”按钮时,我正在调用行动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];
}
当我点击此按钮时,我正在调用actionHiddenButton
行动NSLog(@"actionHiddenButton");
- (IBAction)actionHiddenButton:(id)sender {
NSLog(@"actionHiddenButton");
}
但问题是,当我点击我看到的新按钮时,动作未被调用。
知道为什么会这样吗?
当我将顶部隐藏按钮从y = -70移动到y = 170时,动作将被调用。
可以从here
下载示例项目我想要实现的是,通过向下移动视图,在一行的顶部显示三个按钮(如菜单)。
答案 0 :(得分:1)
确认您的按钮不在另一个视图的框架后面。即使按钮是可见的,如果有东西覆盖它,它也不会工作。我目前无法访问xcode,但我的猜测是你的视图“堆栈”禁止你与按钮交互。一个按钮只是一个uiview,您可以使用与视图相关的按钮和标签执行所有相同的动画。您最好的选择是将视图留在后台,只需移动按钮即可。因为你的“隐藏”按钮不是主要“视图”的主要部分,因为你的问题就在那里。
经过进一步调查,您的问题与自动布局有关,并确保您的按钮对象保持在视图层次结构中。如果您关闭自动布局,您将看到问题所在。当您为主视图设置动画时,“隐藏”按钮不在视图中,并且处于非活动状态。最简单的解决方案是只为按钮设置动画。最接近你所拥有的最佳解决方案是在“主视图”上添加另一个视图,然后将按钮放入该视图中。为什么你有两次这样的背景图像?为什么不直接将视图的背景颜色设置为相同的黄色?
答案 1 :(得分:0)
我下载了您的项目,似乎您正在为self.view
进行翻译。因此,actionHiddenButton
不在框架中。最好让您想要在单独视图中设置controls
动画。
如果您想查看问题,请在视图转换后将clipsToBounds
设置为YES
。像
self.view.transform = translation;
self.view.clipsToBounds = YES;
答案 2 :(得分:0)
Yipeee !!!以下是我的表现。
添加了新变量。
@property (retain, nonatomic) NSString *hideStatus;
-(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];
}
附件是示例项目。您可以从here下载。