动画后UIButton没有响应

时间:2013-09-24 22:24:53

标签: ios objective-c uibutton ibaction cgaffinetransform

我更愿意先从下方链接下载该项目,然后继续问题(仅36kb)

Download Link

开始时,我的情况如下所示。

enter image description here

当我点击“我的办公室”按钮时,我正在调用行动actionSeenButton,这将打印NSLog(@"actionSeenButton");

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

这很有效。

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

enter image description here

使用的代码是

- (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

下载示例项目

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我下载了您的项目,似乎您正在为self.view进行翻译。因此,actionHiddenButton不在框架中。最好让您想要在单独视图中设置controls动画。
如果您想查看问题,请在视图转换后将clipsToBounds设置为YES。像

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

答案 2 :(得分:0)

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];
}

附件是示例项目。您可以从here下载。