0

我正在编写一个测验应用程序。在 Menu-ViewController 中,我将音乐添加到项目中。musicPlayer 运行良好,只要 Menu-ViewController 在前面,我也可以控制它(播放、暂停、停止等)。当我显示另一个 ViewController 时,音乐在后台运行,就像我想的那样。但是如果尝试调用第二个ViewController中第一个ViewController的play/pause方法,音乐就暂停了也没有停止。我不知道为什么!如果我在此方法中添加其他说明,一切都会好起来的。(我尝试了exit(0);方法。这是我的代码:

控制器 1 .h:

@implementation MenuViewController : <....> {
... }
@property (retain) AVAudioPlayer *backgroundPlayer;
- (void) playPauseMethod;

控制器 1 .m:

@interface ...
@end
@implementation MenuViewController 
@ synthesize 
- (void) soundChanger {
if (hintergrundPlayer.isPlaying) {
    [backgroundPlayer pause];}
else if (!backgroundPlayer.isPlaying) {
    [backgroundPlayer play];}}

控制器 2 .h:

#import "MenuViewController.h"
@interface QuizViewController : UIViewController{}

控制器 2 .m:

@interface ...
@end
@implementation MenuViewController 
@ synthesize ...
//..... musicPlayer is playing music.
- (IBAction)myMusic:(id)sender {
//first try:
[[[MenuViewController alloc] init].backgroundPlayer pause];
//second try:
[[[MenuViewController alloc] init] soundChanger];}

我想控制每个 ViewController 中的音乐。我期待着你的帮助。

4

1 回答 1

0

您正在 Controller2 中创建一个全新的 MenuViewController

[[MenuViewController alloc] init]

处理它的最佳方法是在控制器 2 中设置一个协议,例如

@protocol <Controller2Delegate>
-(void) playButtonPressed:(id)self;
@end

然后像这样设置一个委托属性(仍在控制器 2 中):

@property (weak) id <Controller2Delegate> delegate;

然后,回到控制器 1,当您创建控制器 2 时,设置它的委托属性,如下所示:

QuizViewController *controller2 = [[QuizViewController alloc] init]];
controller2.delegate = self;

然后在控制器 1 的某处创建 playButtonPressed 方法。在控制器 2 中,您将执行以下操作:

[self.delegate playButtonPressed:self];

这将调用控制器 1 中的方法,您可以在其中暂停后台播放器。

于 2013-04-04T22:18:32.427 回答