目标C:切换视图后关闭音乐

时间:2016-06-05 15:45:19

标签: ios objective-c audio model-view-controller avaudioplayer

因此,如果我停留在相同的View Controller上,我的音频工作正常,音乐会打开和关闭我想要的音乐。但是,当我使用不同的头文件模态到另一个视图控制器并返回到我原来的视图控制器时,我无法再打开或关闭音乐。这是我的代码:

-(void) viewDidLoad {
//Play Background Music in .1 second after game loads
    [self performSelector:@selector(playBackgroundMusic) withObject:nil afterDelay:0.1];
}

-(void) playBackgroundMusic {

        //Music int is used so music doesnt play over itself
        if (musicInt == 0) {

            NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
            resourcePath = [resourcePath stringByAppendingString:@"/JungleMusic.wav"];
            NSLog(@"Path to play: %@", resourcePath);
            NSError* err;

            //Initialize our player pointing to the path to our resource
            player = [[AVAudioPlayer alloc] initWithContentsOfURL:
                      [NSURL fileURLWithPath:resourcePath] error:&err];

            musicInt = musicInt + 1;
            //set our delegate and begin playback
            player.delegate = self;
            [player play];
            player.numberOfLoops = -1;
            player.currentTime = 0;
            player.volume = 1.0;
        }
}

//Used to turn the music on or off
    -(IBAction)musicTest:(id)sender{
        if (player.playing) {
            [player stop];
        } else {
            [player play];
        }
    }

我还在同一个.m文件中合成了我的播放器:

@synthesize player;

在我的.h文件中,我声明了AVAudioPlayer

    @interface ViewController1 : UIViewController <AVAudioPlayerDelegate>

    {
        AVAudioPlayer *player;
    }

@property (nonatomic, retain) AVAudioPlayer *player;

任何帮助解决这个问题将不胜感激。我只是无法理解为什么在简单建模到另一个视图控制器之后我无法打开/关闭音频?谢谢!

1 个答案:

答案 0 :(得分:2)

根据我们在评论中的对话,答案是你有一个转到第二个视图控制器的segue,以及第二个要返回的segue,它实际上创建了一个原始视图控制器的新实例(并且你结束了使用三个视图控制器。)

解决方案是将后退按钮连接到调用dismissViewController:animated:completion:的IBAction,或将后退按钮连接到展开segue。当您执行其中一项操作时,后退按钮会关闭第二个视图控制器并公开现有的第一个视图控制器,而不是创建第二个视图控制器的新副本。