2014-07-16 41 views
0

我有兩個按鈕。一個顯示聲音何時播放,另一個顯示聲音未播放。但是,當我將其關閉並切換視圖控制器時。我回到主菜單視圖控制器聲音重新開始。我想根據用戶設置保持開啓或關閉聲音。如何保持聲音關閉

 (IBAction)pauseSound 
{ 
    BOOL shouldPlaySound = YES; 
    [[NSUserDefaults standardUserDefaults] setBool:shouldPlaySound forKey:@"shouldPlaySound"]; 
    if (![sound isPlaying]) { 
     [sound play]; 
     [soundButton setBackgroundImage:[UIImage imageNamed:@"SoundOn.png"] forState:UIControlStateNormal]; 
    }else { 
     [sound pause]; 
     [soundButton setBackgroundImage:[UIImage imageNamed:@"SoundOff.png"] forState:UIControlStateNormal]; 
     } 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
+1

您的代碼在哪裏? –

+0

請張貼一些代碼。我的猜測是你要麼開始音樂'viewDidAppear',要麼當你「切換」視圖控制器時卸載你的視圖,所以'viewDidLoad'被再次調用,並且音樂開始播放。 – michaelsnowden

+0

我編輯了我的帖子,我在viewDidLoad中調用它。 – user3839056

回答

0

一個好辦法做到這一點是節約用是否在NSUserDefaults播放聲音,這樣設置是由您的應用程序記住。設置即通過

BOOL shouldMuteSound = ...//set it corresponding to your button presses/visibility 
[[NSUserDefaults standardUserDefaults] setBool:shouldMuteSound forKey:@"shouldMuteSound"]; 
//call this to immediatly update the userDefaults 
[[NSUserDefaults standardUserDefaults] synchronize]; 

,並通過

BOOL shouldMuteSound = [[NSUserDefaults standardUserDefaults] boolForKey:@"shouldMuteSound"]; 

加載它,我起先不明白的是,按鈕是播放的聲音相同的viewController內。該代碼可以幫助您:

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    BOOL shouldMuteSound = [[NSUserDefaults standardUserDefaults] boolForKey:@"shouldMuteSound"]; 
    if(!shouldMuteSound){ 
     [self playSound]; 
    }else{ 
     [self stopSound]; 
    } 
} 

- (void)playSound{ 
    if(!sound){ 
     NSString *path = [[NSBundle mainBundle] pathForResource:@"Main Menu" ofType:@"mp3"]; 
     sound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
     sound.numberOfLoops = -1; 
    } 
    if (![sound isPlaying]){ 
     [sound play]; 
    } 
    [soundButton setBackgroundImage:[UIImage imageNamed:@"SoundOn.png"] forState:UIControlStateNormal]; 
} 

- (void)stopSound{ 
    [sound pause]; 
    [soundButton setBackgroundImage:[UIImage imageNamed:@"SoundOff.png"] forState:UIControlStateNormal]; 
} 

- (IBAction)soundButtonTapped{ 
    BOOL shouldMuteSound = [[NSUserDefaults standardUserDefaults] boolForKey:@"shouldMuteSound"]; 
    shouldMuteSound = !shouldMuteSound; 
    [[NSUserDefaults standardUserDefaults] setBool:shouldMuteSound forKey:@"shouldMuteSound"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    if(shouldMuteSound){ 
     [self stopSound]; 
    }else{ 
     [self playSound]; 
    } 
} 
+0

我從來沒有使用USERDefaults,所以我有點困惑。我一直試圖在App Delegate中聲明它,但我收到錯誤消息。 – user3839056

+0

我希望聲音在應用程序加載後立即開始運行。但是,每當我將代碼移到viewDidAppear時,它就停止工作。 – user3839056

+0

我看到 - 這是一個有效的點:)所以如果該鍵不存在,userDefaults將返回NO。爲了讓事情順利進行,你可以通過第一個codenippet在appDelegates'applicationDidFinishLaunching'開始處提供一個初始值,或者看看我編輯的答案剛剛翻轉了boolvalue的含義,所以NO表示play。 – robert