2

我正在制作一个简单的抽认卡应用程序。这是我的一个应用故事板的部分截图:

故事板截图

它在两个按钮(“yesButton”、“noButton”)之上包含一个 UIImageView(“turnImage”),以及一个覆盖整个视图并与所有其他元素重叠的附加第三个按钮(在此屏幕截图中不可见)。当这个视图最初显示时,两个按钮上的图像被设置为 nil 并且 UIImageView 被设置为显示一个“点击更改”图形(第三个不可见的按钮实际上捕捉到了点击):

[yesButton setImage:nil forState:UIControlStateDisabled];
[noButton setImage:nil forState:UIControlStateDisabled];
turnImage.image = [UIImage imageNamed:@"card-flip-01.png"];
yesButton.enabled = NO;
noButton.enabled = NO;

在此处输入图像描述

当图像被点击(或用户触摸屏幕上的任何其他位置)时,图像变为“正确”和“错误”按钮,用户可以从中选择他们是否知道这个词(这些屏幕截图中未显示):

turnImage.image = nil;
yesButton.enabled = YES;
noButton.enabled = YES;
[yesButton setImage:[UIImage imageNamed:@"card-answer-correct-01.png"] forState:UIControlStateNormal];
[noButton setImage:[UIImage imageNamed:@"card-answer-wrong-01.png"] forState:UIControlStateNormal];

在此处输入图像描述

上面的屏幕截图显示了正常行为。但是,我只在其他所有编译中都会出现这种行为- 其余时间,初始屏幕(应该只显示“点击更改”图形)显示所有三个图像,而“点击更改”图形是拉伸与正常不同:

在此处输入图像描述

除了图形故障之外,该程序运行良好:点击任意位置让用户进入下一个屏幕,两个按钮正确显示。

我在模拟器中和在设备上运行时都得到了这个。在模拟器中,每次运行程序时行为都会发生变化;重置模拟器内容和设置不会影响这一点。在设备上,只要我告诉 Xcode 在设备上运行它,行为就会发生变化。如果我从计算机上拔下设备并启动/关闭应用程序而不更改其代码,则行为不会改变。(正是这些因素的结合使我认为行为的变化与编译有关。)

我尝试关闭 Xcode 并重新启动它,以及重新启动计算机。这些都没有效果。我正在运行最新版本的 Xcode。

上面的代码片段与我的程序中的并不完全相同:为了便于阅读,它们已经被简化了一点。不应该有任何功能更改,但可以肯定的是,这里也是原始代码:

- (void)viewDidLoad{

// I've cut irrelevant stuff that happens before

[yesButton setImage:nil forState:UIControlStateDisabled];
[noButton setImage:nil forState:UIControlStateDisabled];

flipped = NO;
turnImage.image = [UIImage imageNamed:@"card-flip-01.png"];
[self setResponseNavigationButtons:flipped];

}


- (void) setResponseNavigationButtons:(BOOL)status{

if (status){
    turnImage.image = nil;
    [yesButton setImage:[UIImage imageNamed:@"card-answer-correct-01.png"] forState:UIControlStateNormal];
    [noButton setImage:[UIImage imageNamed:@"card-answer-wrong-01.png"] forState:UIControlStateNormal];
} else {
    turnImage.image = [UIImage imageNamed:@"card-flip-01.png"];
    [yesButton setImage:nil forState:UIControlStateNormal];
    [noButton setImage:nil forState:UIControlStateNormal];
}

yesButton.enabled = status;
noButton.enabled = status;

}

setResponseNavigationButtons 在切换到另一个视图时调用 YES。

4

1 回答 1

0

D'oh,发现错误。在第 N 次重建项目时,我终于注意到了我之前错过的警告:

警告:输出文件的多个构建命令 ... card-flip-01.png

显然,我的资源中有两个同名的不同图像,编译器会在它要抓取的图像之间交替。重命名错误解决了问题 - 它是透明的,并且让是/否图像显示出来。

于 2013-10-28T15:12:47.303 回答