質問
かなり基本的な質問があります。いくつかの(5) UIImageView
画像があります
私の画面。ボタンをクリックすると、各画像を変更したい
他の何かに。また、各画像が変更されるたびにサウンドを再生します。
したがって、基本的には、各画像が変わるたびにクリック音が必要です。
問題は、何らかの理由で、5つの画像を言っている場合です。
サウンドが最初に5回再生された後、画像が変更されます。
コントロールがに戻ったときにのみ画像が更新されるように 入力用のユーザー。
どうすれば「強制」できますか表示する画像を指定したらすぐに画像を更新しますか?
私はiphone / macworldが初めてなので、簡単に操作してください:-)
リック
解決
画像が更新されるのは、コントロールが入力のためにユーザーに戻ったときだけです。
それがまさに起こることです。 UIはメインスレッドで更新されるため、コードの実行中は更新されません。
目的を達成するには、タイマーが必要になります。 NSTimerのドキュメントをご覧ください。 2番目のイメージを変更するメソッドを起動するタイマーを作成してから、3番目のイメージを変更するためにタイマーを再キューイングする必要があります。あなたが必要とするようなタイマーを作成する便利な方法があります: +(NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)繰り返し
[NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateImage2:) userInfo:nil repeats:NO];
次に、メソッドがあります:
- (void) updateImage2(NSTimer*)theTimer
{
//Update image 2 here
// play sound 2 here
[NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateImage3:) userInfo:nil repeats:NO];
}
updateImage3メソッドの実装はあなたにお任せします:;-)
このように更新を実行すると、メインスレッドにUIを更新する機会が与えられます。
他のヒント
UIImageViewを定期的に更新する方法を探している場合は、次を参照できます。 http://www.shanison.com/2010/12/ 25 / uiimageview-load-remote-image /
サウンドを非同期で再生しながら、おそらくディスクまたはネットワークからイメージをロードしているようです。 UIImage + imageWithContentsOfURL:
とともに AudioServicesPlaySystemSound
を使用しているのでしょうか?ここでは、実際の画像の読み込みとサウンドの再生コードが最も役立ちます。
uiimageviewの背景を変更して更新し、その後もコードの実行を続けたい場合、これは私にとってはうまくいきました:
-(void)imgTapped_event:(UIImageView*)imgViewTapped
{
imgViewTapped.backgroundColor=[UIColor whiteColor];
//let the system update ui changes
[NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.0f]];
//continue your code execution, play sounds etc...
//my helper method to play sound
[self playSound:@"goodAnswer" sync:YES loops:0];
}