Я хочу познакомиться с программированием Objective C / Interface Builder на Mac OSX.Я обычно работаю со звуками, поэтому я пытаюсь кодировать простой аудиоплеер, используя класс NSSound.
Мне уже удалось создать базовое приложение, которое загружает звук, нажав кнопку «Импортер»и затем воспроизведите его, нажав кнопку «Lire».
Вот моя проблема: я хочу иметь TextField в окне, которое отображает «ja joue Simone! ...» при воспроизведении звука,и ничего, когда закончится воспроизведение звука.
При нажатии кнопки «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