5

我宁愿先从下面的链接下载项目,然后继续提问(只有 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 时,会调用操作。

示例项目可以从这里下载

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

4

3 回答 3

1

验证您的按钮不在另一个视图的框架后面。即使按钮是可见的,如果有东西覆盖它也不会起作用。我目前无法访问 xcode,但我的猜测是您的视图“堆栈”禁止您与按钮交互。一个按钮本质上是一个 uiview,你可以对按钮和标签做所有相同的动画,你可以使用视图。您最好的选择是将视图单独留在背景中,然后移动您的按钮。因为您的“隐藏”按钮不是您的主要“视图”层次结构的一部分,这就是您的问题所在。

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

于 2013-09-24T23:19:07.397 回答
0

我下载了你的项目,看来你正在做的翻译self.view。所以actionHiddenButton不在框架中。最好让controls你想在单独的视图中设置动画。
如果您想查看问题,请在您的视图转换后设置clipsToBoundsYES. 像

    self.view.transform = translation;
    self.view.clipsToBounds = YES;
于 2013-09-25T06:36:07.457 回答
0

嘻嘻!!!下面是我的做法。

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

附件是示例项目。你可以从这里下载。

于 2013-09-25T10:52:44.227 回答