Я создал четыре ViewControllers в xcode, каждый из которых воспроизводит другой звуковой микс при нажатии кнопки воспроизведения. Если я перейду к другому диспетчеру просмотра и нажмите эту кнопку воспроизведения ... Как остановить воспроизведение всего другого звука и убедиться, что новый аудиомикс успешно воспроизводится?Как остановить воспроизведение звука с другого ViewController?
Тот же код, указанный ниже, присутствует в четырех мониторах ViewControllers. Единственное различие заключается в том, что я создал три новых экземпляра musicPlayer. Это musicPlayerSummer, musicPlayerWinter, musicPlayerAutumn. И я создал новые кнопки для каждого viewcontroller.
Любые предложения будут оценены.
Спасибо
импорт UIKit импорт AVFoundation
класс ViewControllerSpring: UIViewController {
var musicPlayer: AVAudioPlayer!
var mySongs = ["1", "2", "3", "4"]
override func viewDidLoad() {
super.viewDidLoad()
initAudio()
// Do any additional setup after loading the view.
}
func initAudio() {
let path = NSBundle.mainBundle().pathForResource(mySongs[0], ofType: "mp3")!
do {
musicPlayer = try AVAudioPlayer(contentsOfURL: NSURL(string: path)!)
musicPlayer.prepareToPlay()
musicPlayer.numberOfLoops = -1
} catch let err as NSError {
print(err.debugDescription)
}
let session:AVAudioSession = AVAudioSession.sharedInstance()
do {
try session.setCategory(AVAudioSessionCategoryPlayback)
} catch {
//catching the error.
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
override func prefersStatusBarHidden() -> Bool {
return true
}
@IBAction func springPlayPressed(sender: UIButton) {
if musicPlayer.playing {
musicPlayer.stop()
// for normal state
sender.setImage(UIImage(named: "play.png"), forState: UIControlState.Normal)
} else {
musicPlayer.play()
// for Highlighted state
sender.setImage(UIImage(named: "Pause.png"), forState: UIControlState.Normal)
}
}
}
Есть несколько способов. Одним из способов является делегирование и другой способ PostNotification. Если есть только один игрок, то следует использовать делегирование, и если больше игроков останавливается, то следует использовать Notification Observer. – iMuzahid
Согласовано, передовая практика идет выше. Но если вы хотите сделать короткий снимок ... (обычно считается плохой практикой) ... сделайте своих игроков глобальными, или лучше, чем они делают каждый из них. – MikeG
Почему плохая практика делает игроков глобальными? – hoboman