gpt4 book ai didi

当 View Controller 向后移动时,iOS 音频停止播放

转载 作者:行者123 更新时间:2023-11-29 01:10:09 25 4
gpt4 key购买 nike

我在一个导航 Controller 中有两个 View Controller 。我从第一个 View Controller 转到第二个 View Controller ,然后在第二个 View Controller 中播放音频。但是,当我按下后退按钮返回到第一个 View Controller 时,音频停止播放。

下面是音频播放类:

@interface AudioPlayer ()
@property AVAudioSession *audioSession;
@property AVAudioPlayer *audioPlayer;
@property BOOL audioPlaying;
@property BOOL audioInterrupted;
@end

@implementation AudioPlayer

- (instancetype)init
{
self = [super init];
if (self) {
[self configureAudioSession];
[self configureAudioPlayer];
}
return self;
}

- (void)tryPlayMusic {
[_audioPlayer prepareToPlay];
[_audioPlayer play];
_audioPlaying = YES;
}

- (void) configureAudioSession {
// Implicit initialization of audio session
self.audioSession = [AVAudioSession sharedInstance];
NSError *setCategoryError = nil;
[self.audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];

if (setCategoryError) {
NSLog(@"Error setting category! %ld", (long)[setCategoryError code]);
}
}

- (void)configureAudioPlayer {
// Create audio player with background music
NSString *audioPath = [[NSBundle mainBundle] pathForResource:@"bigbigworld" ofType:@"mp3"];
NSURL *audioURL = [NSURL fileURLWithPath:audioPath];
_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:nil];
_audioPlayer.numberOfLoops = -1; // Negative number means loop forever
}
@end

最佳答案

因为您在第二个 Controller 中创建 audioPlayer 作为属性。当弹出时,系统将释放第二个 Controller ,第二个 Controller 的任何属性都将被释放。

如果你想继续玩,你可以通过将第二个 Controller 指定为第一个 Controller 的强属性来创建从第一个 Controller 到第二个 Controller 的强引用点。

或者您可以简单地在第一个 Controller 或导航 Controller 中播放 Controller ,在第二个需要播放音频时,调用委托(delegate)给第一个 Controller 或导航 Controller 。这样,注意你的delegate属性是weak属性,避免强引用循环

关于当 View Controller 向后移动时,iOS 音频停止播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35858353/

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