Ios UIButton在动画之后没有响应

Ios 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

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

一开始我的情况如下

当我单击我的Office按钮时,我正在调用action
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];
}
当我单击此按钮时,我调用action
actionHiddenButton
,它将打印
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];
}