私は簡単なフラッシュカードアプリケーションを作っています。これは、私のアプリ ストーリーボードの 1 つの部分的なスクリーンショットです。
2 つのボタン (「yesButton」、「noButton」) の上に 1 つの UIImageView (「turnImage」) と、ビュー全体をカバーし、他のすべての要素 (このスクリーンショットでは見えない) と重なる追加の 3 つ目のボタンが含まれています。このビューが最初に表示されるとき、2 つのボタンの画像は nil に設定され、UIImageView は「タップして変更」グラフィックを表示するように設定されます (3 番目の非表示ボタンが実際にタップをキャッチします)。
[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];
上記のスクリーンショットは、通常の動作を示しています。ただし、他のすべてのコンパイルでのみこの動作が発生します-残りの時間、初期画面(「タップして変更」グラフィックのみを表示することになっています)には3つの画像すべてが表示され、「タップして変更」グラフィックは通常とは異なるストレッチ:
グラフィカルな不具合は別として、プログラムは問題なく動作します。ユーザーは任意の場所をタップすると、2 つのボタンが正しく表示される次の画面に移動します。
これは、シミュレーターとデバイスで実行したときの両方で得られます。シミュレーターでは、プログラムが実行されるたびに動作が変わります。シミュレーターのコンテンツと設定をリセットしても、これには影響しません。デバイスでは、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 で呼び出されます。