2015-09-18 1 views
0

Я создаю приложение Audio Player с помощью Swift. У меня есть два контроллера просмотра на моей раскадровке. Второй контроллер просмотра создает экземпляр AVAudioPlayer и используется для воспроизведения звука. Я хочу, чтобы пользователь мог перейти от этого контроллера представления, использовать другие функции в приложении и вернуться к этому контроллеру просмотра, чтобы манипулировать проигрывателем.Как предотвратить создание нового экземпляра класса AVAudioPlayer каждый раз при загрузке View Controller - Swift

Проблема в том, что когда я воспроизвожу какой-то звук, переходите от него, а затем возвращайтесь к игровому контроллеру View Controller и снова воспроизводите воспроизведение, одновременно воспроизводятся две версии аудиофайла.

Я предполагаю, что он создает новый экземпляр объекта AVAudioPlayer, вместо того, чтобы манипулировать тем, что я сделал первым. Я думаю, что это имеет какое-то отношение к сокращению выделения Swift и повторной инициализации контроллера просмотра Player?

Вот соответствующий код:

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 
    var player: AVAudioPlayer = AVAudioPlayer() 
    let audioPath = NSBundle.mainBundle().pathForResource("daftPunk", ofType: "mp3")! 
    @IBOutlet var volumePosition: UISlider! 
    @IBOutlet var scrubPosition: UISlider! 
    @IBAction func play(sender: AnyObject) { 
    player.play() 
} 

ответ

0

Я считаю, что самым быстрым решением было бы создать одноэлементный класс, который оборачивает объект AVAudioPlayer.

class AudioPlayer { 
    var player: AVAudioPlayer = AVAudioPlayer() 
    let audioPath = NSBundle.mainBundle().pathForResource("daftPunk", ofType:  "mp3")! 
    static let sharedInstance = AudioPlayer() 
    init() { } 
} 

, а затем использовать AudioPlayer.sharedInstance.player.play(). Таким образом, вы всегда будете иметь только один экземпляр AudioPlayer и, следовательно, AVAudioPlayer.