MacOSXでのObjectiveC/InterfaceBuilderプログラミングに精通したいと思います。私は通常サウンドを扱っているので、NSSoundクラスを使用して単純なオーディオプレーヤーをコーディングしようとしています。
「インポート」ボタンをクリックしてサウンドをロードし、「Lire」ボタンをクリックしてサウンドを再生する基本的なアプリケーションを作成することができました。
これが私の問題です。サウンドの再生時に「ÇajoueSimone!...」を表示し、サウンドの再生が終了すると何も表示しないTextFieldをウィンドウに表示したいと思います。
「Lire」ボタンをクリックすると、メッセージが正常に表示されますが、サウンドの再生が終了してもメッセージは表示されたままになります。
そのため、didFinishPLayingデリゲートメソッドの使用方法について誤解していると思います。
誰かヒントがありますか?
//
// ControleurLecteur.h
// LecteurSon
//
#import <Cocoa/Cocoa.h>
@interface ControleurLecteur : NSObject {
NSSound *son ;
IBOutlet NSTextField *infoTextField ;
IBOutlet NSTextField *cheminField ;
IBOutlet NSTextField *durationField ;
}
-(IBAction)lireSon:(id)sender ;
-(IBAction)importerSon:(id)sender ;
-(IBAction)son:(NSSound *)son didFinishPlaying:(BOOL)bienjoue;
@end
//
// ControleurLecteur.m
// LecteurSon
//
#import "ControleurLecteur.h"
@implementation ControleurLecteur
-(IBAction)importerSon:(id)sender {
NSString *Chemin = [[NSString alloc] initWithString:(NSString *)@"epno"] ;
son = [[NSSound soundNamed:Chemin] retain];
// Limiter l'affichage de la durée à 3 chiffres après la virgule
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:3];
[[durationField cell] setFormatter:numberFormatter];
// Remplissage du champ de texte durée
[durationField setFloatValue:[son duration]] ;
}
-(IBAction)lireSon:(id)sender {
BOOL bienjoue;
bienjoue = [son play];
bienjoue = TRUE;
[infoTextField setStringValue:@"Ça joue Simone !..."];
son:didFinishPlaying:bienjoue;
}
-(IBAction)son:(NSSound *)son didFinishPlaying:(BOOL)bienjoue {
[infoTextField setStringValue:@""] ;
}
@end