Ios UIButton在动画之后没有响应
我希望先从下面的链接下载项目,然后继续提问(仅36kb) 一开始我的情况如下 当我单击我的Office按钮时,我正在调用actionIos UIButton在动画之后没有响应,ios,objective-c,uibutton,ibaction,cgaffinetransform,Ios,Objective C,Uibutton,Ibaction,Cgaffinetransform,我希望先从下面的链接下载项目,然后继续提问(仅36kb) 一开始我的情况如下 当我单击我的Office按钮时,我正在调用actionactionSeenButton,它将打印NSLog(@“actionSeenButton”) 这很好用 当我单击“显示隐藏按钮”时,我将视图滑动100,并显示顶部的图像和按钮,如下图所示 使用的代码是 - (IBAction)showHiddenButton:(id)sender { CGAffineTransform translation = C
actionSeenButton
,它将打印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];
}
当我单击此按钮时,我调用actionactionHiddenButton
,它将打印NSLog(@“actionHiddenButton”)代码>
但问题是,当我单击看到的新按钮时,没有调用操作。
知道为什么会这样吗
注
当我将顶部隐藏按钮从y=-70移动到y=170时,将调用操作
示例项目可以从
我想实现的是,通过向下移动视图,在一行的顶部显示三个按钮(作为菜单)。验证您的按钮是否位于另一个视图的框架后面。即使按钮是可见的,如果有什么东西遮盖它,它也不会工作。我目前没有访问xcode的权限,但我猜您的视图“堆栈”禁止您与按钮交互。按钮通常是uiview,您可以对按钮和标签执行与视图相同的动画。最好的办法是将视图单独放在背景中,只需移动按钮。因为你的“隐藏”按钮不是你主要的“视图”层次结构的一部分,这就是你的问题所在
进一步调查后,您的问题与自动布局和确保按钮对象保留在视图层次结构中有关。如果关闭“自动布局”,您将看到问题所在。当您设置主视图的动画时,“隐藏”按钮将关闭视图,并处于非活动状态。最简单的解决方案是只设置按钮的动画。下一个最好的解决方案是将另一个视图添加到“主视图”中,然后将按钮放入该视图中。还有,为什么背景图像会出现两次?为什么不将视图的背景色设置为相同的黄色?我下载了您的项目,看起来您正在为self.view
进行翻译。因此,actionHiddenButton
不在帧中。最好在单独的视图中设置要设置动画的控件。
如果要查看问题,请在视图转换后将clipstobunds
设置为YES
。像
self.view.transform = translation;
self.view.clipsToBounds = YES;
哎呀!!!下面是我怎么做的
H
添加了新变量
@property (retain, nonatomic) NSString *hideStatus;
M
附件是样本项目。您可以从下载。好的,我知道问题出在哪里了。那么,解决方法是什么呢?最好将按钮放在ui视图中。然后执行CGAffineTransform
对于该视图,最简单的解决方案是只设置按钮的动画。很难,因为对所有的viewcontroller来说,这样做会很难。与其使用@隐藏的字符串,为什么不使用BOOL呢?这是他们的目的。因此,您可以使用“@property(assign)BOOL ishiden;”然后在if语句中使用“if(ishiden)…”或“if(!ishiden)…”。此外,“CGAffineTransform translation=CGAffineTransformity;”也是不必要的。它应该是“CGAffineTransform translation;”。因为您正在以不同的方法重用它,所以最好将其作为属性。@DoS:crap。。我知道我可以用布尔值,但由于某种原因我没有用。。。我有更多的隐藏状态,因此我使用字符串。。我有很多状态,根据状态,我将显示/隐藏所需的内容。。。不过,谢谢你的帮助
self.view.transform = translation;
self.view.clipsToBounds = YES;
@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];
}