在我建立的iOS应用程序中,我正在以特定的时间间隔发出声音。一个自动收报机声音和另一个声音,这是在名为ResultView的UIView中完成的。现在,此视图由ResultViewController显示。
问题: 当按下导航按钮的后退按钮时,我希望声音消失。
这个后退按钮使它返回名为LOBBY的viewController 这是一个问题,因为没有viewWillDissapear函数可用。 整个代码很大,所以我只提出了小片段。提前致谢
ResultViewController:
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back.png"]
style:UIBarButtonItemStylePlain target:self
action:@selector(gotoLobby)];
//大厅选择器
- (void)gotoLobby{
//Pop Back to Lobby
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
}
现在正在播放声音的视图(PlayerResultView):
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.75 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
if([[NSUserDefaults standardUserDefaults]boolForKey:@"soundKey"])
{
NSString *path = [[NSBundle mainBundle]
pathForResource:@"ticker bell" ofType:@"caf"];
NSURL *pathURL = [NSURL fileURLWithPath:path];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pathURL,&tickerbell);
AudioServicesPlaySystemSound(tickerbell);
}
}
再次: 当按下后退按钮时,我需要一种控制这些声音的方法。(当它进入大厅时)
因为条形码被编码,它不会显示在mainStoryBoard上所以请不要告诉我使用IBAction方法。 谢谢
答案 0 :(得分:1)
正确的解决方法是将声音代码移动到视图控制器中。这将更符合模型 - 视图 - 控制器模式。
在任何情况下,您都需要添加PlayerResultView
方法来停止播放声音:
- (void)stopCurrentSound {
OSStatus AudioServicesDisposeSystemSoundID (tickerBell);
}
然后,在gotoLobby
中,您可以调用它:
- (void)gotoLobby{
[self.playerResultView stopCurrentSound];
//Pop Back to Lobby
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
}
我假设您在视图控制器中引用了PlayerResultView
视图,否则您需要添加一个视图,以便向视图发送消息。