gpt4 book ai didi

ios - 如何停止在 Xcode 中播放不同类(class)的背景音乐?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:02:08 25 4
gpt4 key购买 nike

我已经在 ViewController.h 和 .m 文件中设置了要播放的音乐轨道,如下所示。我想在加载新场景时停止它。 (.h):

@interface ViewController : UIViewController<AVAudioPlayerDelegate>{

AVAudioPlayer *startingMusic;

}

@property (nonatomic, retain) AVAudioPlayer *startingMusic;

@end

然后.m

@synthesize startingMusic;
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *music = [[NSBundle mainBundle] pathForResource:musicTrack ofType:@"mp3"];
startingMusic=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:music] error:NULL];
startingMusic.delegate=self;
startingMusic.numberOfLoops=-1;
[startingMusic play];
}

然后,当新场景在使用此代码的 init 方法中加载一个名为 PlayLevel.m 的不同类时,我会尝试停止播放。

ViewController *test = [[ViewController alloc] init];
[test.startingMusic stop];

然而,当新看到的加载时,音乐会继续播放。有什么建议吗?

最佳答案

当您执行 ViewController *test = [[ViewController alloc] init]; 时,您创建了新的 ViewController 实例,这意味着您现在在内存中有两个 ViewController 的对象。

您真正需要做的是对当前的调用 stop

如果您想停止来自与您的 ViewController 没有连接的另一个 Controller 的音乐,您可以尝试通过通知来实现。

例如:

在您的 ViewController.h 文件中,导入后:

static NSString * const kStopMusicNotificationName = @"kStopMusicNotificationName";

在你的 ViewController viewDidLoad:

[NSNotificationCenter.defaultCenter addObserverForName:kStopMusicNotificationName object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
[self.startingMusic stop];
}];

以及何时需要停止音乐:

[NSNotificationCenter.defaultCenter postNotificationName:kStopMusicNotificationName object:nil];

关于ios - 如何停止在 Xcode 中播放不同类(class)的背景音乐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28608480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com