2017-08-31 11 views
-2

私は音楽アプリを作っています。私は手動でタブビューコントローラの代わりに2つのビューコントローラを作成して、テーブルビューを手動で作成します。xcodeで重複する音楽を修正する方法

問題は、テーブルのセルをクリックすると、音楽が再生されます。しかし、もう一度別のセルをクリックすると、新しい曲が再生され、再生中の現在の曲は停止しません。私は、新しいセルをクリックするとすぐに、現在の演奏曲を止めて、その曲が重なり合わないようにしたい。

さらにわかりやすくするために写真を追加しました。あなたが手伝ってくれることを願います。ありがとうございました。

これは私が私の準備セグエの内側までそこにロジックを作ったが、それは動作していない私のViewController1

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return songtitle.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = self.mytbl.dequeueReusableCell(withIdentifier: "cell", for:  indexPath) as! tableviewcell 

    cell.songphoto.image = UIImage(named: img[indexPath.row]) 
    cell.titledisplay.text = songtitle[indexPath.row]  

    return cell  
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {   
    performSegue(withIdentifier: "go2", sender: self) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {  
    let myconn = segue.destination as! vc2  
    let indexPath = mytbl.indexPathForSelectedRow 

    //This is the logic I made but it is not working 

    if myconn.audioplayer.isPlaying == false{   
     myconn.selectedsong = (indexPath?.row)! 
    } else { 
     myconn.audioplayer.stop() 
     myconn.selectedsong = (indexPath?.row)! 
    } 
} 

からコードです。あなたのビューに名前を付ける考える。 This is my viewcontroller that has cells これはあなたのセグエがこの方法によって、ひどいクラス名です(vc2の新しいインスタンスを初期化している、

var audioplayer = AVAudioPlayer()  
var selectedsong = 0 

override func viewDidLoad() { 
    super.viewDidLoad()  

    titlearea.text = songtitle[selectedsong]  
    songpic.image = UIImage(named: img[selectedsong])  

    do { 
     let audioPath = Bundle.main.path(forResource: songtitle[selectedsong], ofType: ".mp3") 

     try audioplayer = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL) 

     audioplayer.play()  

     Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:  #selector(vc2.updateProgressView), userInfo: nil, repeats: true) 
    } 
    catch 
    {  
     print("ERROR") 
    } 
} 

@IBAction func play(_ sender: UIBarButtonItem) { 
    if !audioplayer.isPlaying{ 
     audioplayer.play() 
    } 
} 

This is my second Viewcontroller

+0

[最小限で完全で検証可能なサンプルを作成する方法](https://stackoverflow.com/help/mcve)を参照し、コードを再フォーマットしてください。 –

+0

編集が完了しました。おかげで –

+0

私の戻るボタンの唯一のコードは、dismissanationビューのコントローラコードです。 –

答えて

0

たぶん私のViewController2からのコードですコントローラーは、それが実行されるたびにわかりやすくなります)。この結果、myconn.audioplayer.stop()に電話すると、現在再生中のオーディオプレーヤーには、stop()メソッドが送信されず、まったく新しいオーディオプレイヤーに送信されます。

代わりにやりたいことは、現在再生中のオーディオプレーヤーへの参照を含むプロパティを保持することです。演奏を開始するときに、そのプレイヤーをプロパティに割り当て、停止するときは、プロパティによって指し示されるオブジェクトにstop()メソッドを送信します。

関連する問題