0

最初のビューで、オーディオプレーヤーを作成し、最初からロードします

@interface SplashViewController : UIViewController
...
@property (strong, nonatomic) AVAudioPlayer *mp3;
...
- (void)viewDidLoad
{
[super viewDidLoad];
[self viewDidAppear:YES];
NSString *path = [[NSBundle mainBundle]pathForResource:@"sooner" ofType:@"mp3"];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error;
mp3 = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error];
[mp3 setNumberOfLoops:-1];
[mp3 setVolume:1.0];
[mp3 play];
}

わかりました、私は多くのビューを持っており、私が作業するビューで音楽のプレイが常に重要ではないことを嬉しく思います。しかし、他の(私のSettingView)で音楽を止める必要があります。SettingView に次のコードがありますが、結果がありません - 音楽を再生して再生し、停止したくない

@class SplashViewController;
@interface SettingsViewController : UIViewController

@property (strong, nonatomic) SplashViewController *splashViewController;

________________________________________________________
#import "SplashViewController.h"
...
@implementation SettingsViewController
@synthesize pauseMusik; //UISwitch
@synthesize splashViewController = _splashViewController;
...
-(IBAction)playPauseMusik:(id)sender
{
if(!self.splashViewController)
    self.splashViewController = [[SplashViewController 
alloc]initWithNibName:@"SplashViewController" bundle:nil];
if (pauseMusik.on) {
    [self.splashViewController.mp3 play];
}
else
    [self.splashViewController.mp3 stop];}

どこで間違えましたか?

4

2 に答える 2

1

NSNotificationCenter を使用できます。たとえば.. IBaction (SettingController から):

if.. {
     [[NSNotificationCenter defaultCenter] postNotificationName:@"actionChangedStop" object:nil];
}
else
     [[NSNotificationCenter defaultCenter] postNotificationName:@"actionChangedPlay" object:nil];
}

NSNotificationCenter は、アプリケーション全体にメッセージを「ブロードキャスト」します。

ここで、オブザーバーが必要です.. SplashController で:

- (void)viewDidLoad
{
    [super viewDidLoad];
 ..
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(actionChangedStop)
                                                 name:@"actionChangedStop"
                                               object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(actionChangedPlay)
                                                 name:@"actionChangedPlay"
                                               object:nil];
...

.. 指定されたメソッドが呼び出されます..

-(void)actionChangedStop{[audioPlayer stop];}
-(void)actionChangedPlay{[audioPlayer play];}

..そして出来上がり

于 2012-12-19T00:04:26.987 に答える
1

別のクラス AudioViewController を作成し、メソッドを作成します。

@implementation AudioViewController
@synthesize mp3;
static AudioViewController * sharedPlayer = NULL;
+ (AudioViewController *) sharedPlayer {
if ( !sharedPlayer || sharedPlayer == NULL ) {
    sharedPlayer = [AudioViewController new];
}
return sharedPlayer;
}

そして、再生/一時停止のメソッドを作成しました:

-(void)player:(BOOL)playPause
{
if (playPause==YES)
   [mp3 play];
else [mp3 stop]; }

mp3 の場所

AVAudioPlayer *mp3;

これで、任意の ViewController から簡単に音楽を再生/停止できるようになりました

#import "AudioViewController.h"
...
[[AudioViewController sharedplayer]player:YES]//for playing
[[AudioViewController sharedplayer]player:NO]//for stoping

私の質問に対する決定があります

于 2012-12-19T06:59:35.960 に答える