我做了一个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];
}
答案 0 :(得分:1)
也许它不会对你有所帮助,但它可以为其他人提供帮助。
你应该做的是一个类变量 在class.h中,创建一个AVAudioPlayer变量:
{
AVAudioPlayer *actualAudioPlayer_;
}
@property(nonatomic, retain) AVAudioPlayer *actualAudioPlayer;
在class.m中,使他的sythesize和他的dealloc,然后这是改变的方法:
-(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
}
希望这有助于某人!!
答案 1 :(得分:0)
我对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];
}