ios - UIImages/UIButtons 每次编译程序时表现不同

标签 ios objective-c xcode uiimage

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

Storyboard screenshot

它在两个按钮(“yesButton”、“noButton”)之上包含一个 UIImageView(“turnImage”),以及一个覆盖整个 View 并与所有其他元素重叠的附加第三个按钮(在此屏幕截图中不可见)。最初显示此 View 时,两个按钮上的图像被设置为 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

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

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;

}

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

最佳答案

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

Warning: Multiple build commands for output file ... card-flip-01.png



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

关于ios - UIImages/UIButtons 每次编译程序时表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19636682/

相关文章:

ios - 如何使用系统字体调整操作表元素字体的大小?

iphone - 将 webView 实例变量附加到 Web View 对象

ios - 调试为什么 SKScene init(fileNamed :) returns nil

ios - 在 iOS/tvOS 上显示大量缩略图?

iphone - UIFileSharingEnabled 使用文件夹

ios - 如果一个 ViewController 中有两个 UITableView,一个带有自定义单元格引用,另一个是简单的

ios - 找不到这样的文件和目录Xcode 7

ios - CIRadialGradient 减小图像尺寸

ios - 使用 SDWebImage 加载大 gif 导致 iOS 应用程序因内存错误而崩溃

ios - 如何使用表格 View 外部的按钮将表格 View 移动到新的表格 View