2010-04-13 5 views
0

Je suis en train de comprendre comment brancher un bouton pour jouer un son programme sans utiliser IB. J'ai le code pour jouer le son, mais n'ai aucun moyen d'accrocher le bouton pour jouer le son? de l'aide?pour jouer son programme en utilisant un bouton sur l'iPhone

ici est mon code que j'utilise:

 - (void)playSound 
    { 
     NSString *path = [[NSBundle mainBundle] pathForResource:@"boing_1" ofType:@"wav"]; 
     AVAudioPlayer* myAudio = [[AVAudioPlayer alloc] 
       initWithContentsOfURL:[NSURL fileURLWithPath:path error:NULL]]; 
     myAudio.delegate = self; 
     myAudio.volume = 2.0; 
     myAudio.numberOfLoops = 1; 
     [myAudio play]; 
    } 

Répondre

0
[button addTarget:self action:@selector(playSound) forControlEvents:UIControlEventTouchUpInside]; 

UIButton hérite ses méthodes cible/action à partir UIControl.

+0

ce que je cherchais ... je crois que je l'ai vu quelque chose comme ça avant mais je ne me souviens plus où .... cela devrait très bien fonctionner! Il – Brandon

0

Pour connecter le bouton, définissez la méthode playSound comme le gestionnaire de l'événement UIControlEventTouchUpInside du bouton. À supposer que c'est un contrôleur de vue, vous pouvez mettre cela dans la méthode viewDidLoad:

[button addTarget:self action:@selector(playSound) forControlEvents:UIControlEventTouchUpInside]; 

Pour votre information, vous fuite de mémoire parce que vous êtes alloc -ment un objet mais jamais release -ment il.

Vous devez créer un nouveau membre AVAudioPlayer pour la classe pour éviter cela.

@interface MyViewController : ... 
{ 
    ... 
    AVAudioPlayer* myAudio; 
    ... 
} 

- (void)playSound 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"boing_1" ofType:@"wav"]; 
    [myAudio release]; 
    myAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path error:NULL]]; 
    myAudio.delegate = self; 
    myAudio.volume = 2.0; 
    myAudio.numberOfLoops = 1; 
    [myAudio play]; 
} 

Ne pas oublier de mettre [myAudio release] dans votre méthode dealloc.

(je l'ai fait sans déclarer myAudio comme @property, mais ce n'est pas strictement nécessaire)

+1

probablement ne devrait pas affecter une nouvelle instance de AVAudioPlayer chaque fois que la méthode est appelée. Faites quelque chose comme 'si {myAudio = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath: erreur de chemin: NULL]] (myAudio!); } ' – indragie

+0

commentaire valide, même si je pense que l'idée devrait être « le faire fonctionner » au début. :) –