0

サウンドを再生するボタンを作成し、サウンドの完了後にボタンのイメージを変更したいと考えています。音と画像の変化を同期させるのに苦労しています。

ボタンを押すとサウンドクラスを呼び出すコントローラークラスがあります。サウンド クラスは (AVAudioPlayer を使用して) オーディオ ファイルを再生し、完了後にデリゲート audioPlayerDidFinishPlaying を呼び出します。このデリゲートは画像を変更する必要がありますが、サウンド デリゲートはサウンド クラスにあり、ボタンのプロパティはコントローラー クラスにあるため、デリゲートはボタンと通信できません。

(ボタンへのポインターをサウンドクラスに送信するか、NSNotificationCenterを使用することを考えましたが、よくわかりません)

問題は、デリゲートが UIButton のイメージをどのように変更できるかということです。

ここにいくつかのコードがあります:

//  try1ViewController.h

@class AVSnd;

@interface try1ViewController : UIViewController <AVAudioPlayerDelegate>{
    AVSnd *mAvs1;
}

@property (nonatomic, retain) AVSnd *mAvs1;
@property (weak, nonatomic) IBOutlet UIButton *button2;

@end





// try1ViewController.m

- (IBAction)Button2Pressed:(id)sender 
{
//...
self.mAvs1 = [[AVSnd alloc] initWithCafFile:[NSArray arrayWithObjects: audioX2, audioY1, nil ]];
//...
[myButton2 setImage:[UIImage imageNamed:image1] forState:UIControlStateNormal];
//...
}




//  AVSnd.h

@interface AVSnd : NSObject <AVAudioPlayerDelegate> {
AVAudioPlayer *mSoundPlayer;
NSArray* fileNameQueue;
int index;
}

@property (nonatomic, retain) AVAudioPlayer *mSoundPlayer;
@property (nonatomic, retain) NSArray* fileNameQueue;
@property (nonatomic, assign) int index; 


-(id)initWithCafFile: (NSArray*)queue;
-(void)playWithNum: (int) num;
-(void)fadeOut;
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)mSoundPlayer successfully:(BOOL)flag;
4

2 に答える 2

1

サウンドクラスAVAudioPlayerデリゲートをコントローラークラス オブジェクトとして設定します。

コントローラ クラスにaudioPlayerDidFinishPlayingを実装します。

次に、デリゲートはコントローラー クラスでトリガーされます。プロパティを簡単に変更できます。

注:サウンド クラス内に新しいコントローラ クラス オブジェクトを作成しないでください。ご希望に合わせてお渡しできます。

于 2012-08-01T08:03:19.607 に答える