#iphone #objective-c #avfoundation
#iPhone #цель-c #avfoundation #objective-c
Вопрос:
Я создал приложение для iPhone, в котором я нажимаю UIButton, и воспроизводится звук. но когда я нажимаю на нее снова, я хочу, чтобы это прекратилось. У меня много звуков, но я хочу, чтобы этот звук останавливался только при его двойном нажатии.
Вот код, который я использую!
-(IBAction)pushBeat {
NSString *path =[[NSBundle mainBundle]
pathForResource:@"beat1" ofType:@"mp3"];
AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];
}
Ответ №1:
Возможно, это не поможет вам, но может помочь другим.
Что вам следует сделать, так это переменную класса В class.h, создать переменную AVAudioPlayer:
{
AVAudioPlayer *actualAudioPlayer_;
}
@property(nonatomic, retain) AVAudioPlayer *actualAudioPlayer;
В class.m измените его систематизацию и его освобождение, а позже этот метод был изменен:
-(IBAction)pushBeat {
NSString *path =[[NSBundle mainBundle]
pathForResource:@"beat1" ofType:@"mp3"];
[self.actualAudioPlayer stop]; //NEW
AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
self.actualAudioPlayer = theAudio; //NEW
[sel.actualAudioPlayer play]; //NEW
[theAudio release]; //NEW
}
Надеюсь, это кому-то поможет!!
Ответ №2:
Я не очень разбираюсь в xcode, так что это может быть неправильно, дайте мне знать, если да.
Кажется, что «theAudio» следует сделать членом класса, а не локальным членом функции, в C вы бы сделали это (опять же, потому что я не знаю xcode, это псевдокод).
class MyClass {
public:
MyClass();
~MyClass();
void pushBeat();
private:
AVAudioPlayer* theAudio;
}
MyClass::MyClass() {
theAudio = NULL;
}
MyClass::~MyClass() {
delete theAudio;
}
void pushBeat() {
if (!theAudio) {
theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
}
if (!theAudio.playing)
[theAudio play];
else
[theAudio stop];
}