每次编译程序时,UIImages / UIButtons的行为都不同

时间:2013-10-28 13:56:23

标签: ios objective-c xcode uiimage

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

Storyboard screenshot

它在两个按钮(“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;

enter image description here

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

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

enter image description here

以上屏幕截图显示了正常行为。但是,我只在其他所有编辑中获得此行为 - 其余时间,初始屏幕(应该只显示“点击更改”图形)显示所有三个图像,并且“点按即可更改”图形与正常情况有所不同:

enter image description here

除了图形故障之外,该程序还可以正常工作:点击任意位置可以让用户进入下一个屏幕,两个按钮正确显示。

我在模拟器中和在设备上运行时都得到了这个。在模拟器中,行为每运行一次都会发生变化;重置模拟器内容和设置不会影响这一点。在设备上,只要我告诉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;

}

在更改为其他视图时,使用YES调用setResponseNavigationButtons。

1 个答案:

答案 0 :(得分:0)

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

  

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

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