3

次のように、ボタンの画像をチェックして状態を取得しています。

if([syncBtn.currentImage isEqual:[UIImage imageNamed:@"playbtn1.png"]])
{
  //Do something if play button
}
else if([syncBtn.currentImage isEqual:[UIImage imageNamed:@"syncbtn1.png"]])
{
  //Do something if sync button
}
else 
{
   //do something when no image on button
}

syncbtn1.png または playbtn1.png のいずれかのボタンには常に画像があります。

この上記のチェックは正常に機能していますが、バックグラウンドに移動してからフォアグラウンドに戻ると、上記の方法からボタンの現在の画像を確認できず、else 状態になります。

何が間違っている可能性がありますか?

4

1 に答える 1

2

これは、UIImage インスタンスを比較しているためです。これらはデフォルトでキャッシュされるため、ほとんどの場合、同じインスタンスが取得されます。しかし、アプリがバックグラウンドになった後、キャッシュがクリアされ、新しいインスタンスが取得されます。これは、もはや一致していないことを意味します。

それを修正するための2つのオプション..

あなたの現在の方法を使用して:

  1. イメージ インスタンスを 1 回だけ作成し、強力なプロパティに保存します。
  2. これらの画像をボタンに割り当て、これらのインスタンスに対してもチェックします。

ボタンの状態の使用:

  1. playbtn1.pngの画像を設定しますUIControlStateNormal
  2. syncbtn1.pngの画像を設定しますUIControlStateSelected
  3. 設定して確認するだけsyncBtn.selectedです。選択したフラグを変更すると、画像が自動的に変更されます。
于 2012-12-19T15:11:00.663 に答える