2

私は簡単なフラッシュカードアプリケーションを作っています。これは、私のアプリ ストーリーボードの 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 で呼び出されます。

4

1 に答える 1

0

D'oh、エラーを見つけました。N 回目のプロジェクトの再構築中に、以前に見逃していた警告にようやく気付きました。

警告: 出力ファイルに対する複数のビルド コマンド ... card-flip-01.png

どうやら私のリソースには同じ名前の 2 つの異なるイメージがあり、コンパイラはどちらを取得するかを交互に切り替えていました。間違ったものの名前を変更すると、問題が修正されました-それは透明で、はい/いいえの画像が透けて見えていました。

于 2013-10-28T15:12:47.303 に答える