0

私はクイズアプリをプログラミングしています。Menu-ViewController で、Music をプロジェクトに追加しました。musicPlayer は正常に動作しており、Menu-ViewController が前面にある限り、それを制御 (再生、一時停止、停止など) することもできます。別のViewControllerを表示すると、好きなように音楽がバックグラウンドで実行されます。しかし、2 番目の ViewController にある最初の ViewController の再生/一時停止メソッドを呼び出そうとすると、音楽は一時停止も停止もしませんでした。どうしてか分かりません!このメソッドに他の命令を追加すると、すべてうまくいきます。(メソッドを試しました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 に答える