我正在尝试在我的应用程序中播放音乐.音乐工作正常,但在切换viewControllers并返回主菜单后,我的音乐再次播放!这意味着几个相同的声音一起播放!我怎么解决这个问题?这是我的代码:
- (void)viewDidLoad { Nsstring *music = [[NSBundle mainBundle] pathForResource:@"1music" ofType:@"mp3"]; myMusic = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:music] error:NULL]; myMusic.delegate = self; myMusic.numberOfLoops = -1; [myMusic play]; } - (IBAction) scoreView { scoreViewController *scoreView = [[scoreViewController alloc] initWithNibName:@"scoreViewController" bundle:nil]; [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:1]; [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES]; [self.view addSubview: scoreView.view]; [UIView commitAnimations]; }
编辑代码:
- (id)initWithNibName:(Nsstring *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { Nsstring * musicSonati = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"]; myMusic = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:musicSonati] error:NULL]; myMusic.delegate = self; myMusic.numberOfLoops = -1; [myMusic play]; } return self; } //toggle button - (IBAction)MusicPlaying:(id)sender { if ((isPlay = !isPlay)) { UIImage *buttonImagenormal = [UIImage imageNamed:@"play.png"]; UIImage *stretchableButtonImagenormal = [buttonImagenormal stretchableImageWithLeftCapWidth:0 topCapHeight:0]; [MusicButton setBackgroundImage:stretchableButtonImagenormal forState:UIControlStatenormal]; [myMusic pause]; }else { UIImage *buttonImagenormal = [UIImage imageNamed:@"pause.png"]; UIImage *stretchableButtonImagenormal = [buttonImagenormal stretchableImageWithLeftCapWidth:0 topCapHeight:0]; [MusicButton setBackgroundImage:stretchableButtonImagenormal forState:UIControlStatenormal]; NSLog(@"Music play"); [myMusic play]; } }
解决方法
确保myMusic被正确声明为保留属性并合成然后尝试这样的事情:
-(void) commonInit { Nsstring * musicSonati = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"]; self.myMusic = [[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:musicSonati] error:NULL] autorelease]; self.myMusic.delegate = self; self.myMusic.numberOfLoops = -1; //You probably don't want to play music on init,rather defer to viewDidLoad. // [self.myMusic play]; } - (id)initWithCoder:(NSCoder *)coder { self = [super initWithCoder:coder]; if (self) { [self commonInit]; } return self; } - (id)init { self = [super init]; if (self) { [self commonInit]; } return self; } - (id)initWithNibName:(Nsstring *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { [self commonInit]; } return self; }
然后在viewDidLoad中尝试:
- (void)viewDidLoad { ... if (!self.myMusic.playing) { [self.myMusic play]; } ... }
另外,不要忘记以dealloc发布你的播放器!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。