2016-04-28 11 views
1

Wenn ich auf UIButton drückte, beginnt Musik. Und wenn ich wieder auf den Knopf drücke, hört die Musik auf. Während der Musikwiedergabe, wenn ich auf eine andere Zellentaste drücke, werden beide Musikstücke abgespielt. Ich habe nicht verstanden, wie ich Musik stoppen kann, die von anderen Zellen spielt, oder mit anderen Worten, nur eine Musikinstanz spielt auf einmal. Auch eine Schaltfläche Bildanimation automatisch auf den Standard-Zustand wie sender.selected = falseStop Others Ton wenn jemand aus anderen Zellen spielt, wenn UIButton von uitableviewcell gedrückt wird

Bitte kann mir jemand sagen, wie kann ich das tun?

Dank

UIButton connected with CollectionViewCell Class

Default image State And when i pressed on button on different cells each cell play music and and change its image state to play

class RadioCollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { 

    let reuseIdentifier = "cell" 

    var objects = [ 
     ["url" : "https://s3.amazonaws.com/kargopolov/BlueCafe.mp3", "image": "1.jpg"], 
     ["url" : "https://s3.amazonaws.com/kargopolov/BlueCafe.mp3", "image": "2.jpg"], 
     ["url" : "http://2016.downloadming1.com/bollywood%20mp3/Sanam%20Teri%20Kasam%20(2016)/02%20-%20Kheech%20Meri%20Photo%20-%20DownloadMing.SE.mp3", "image": "3.jpg"], 
     ["url" : "http://2016.downloadming1.com/bollywood%20mp3/Sanam%20Teri%20Kasam%20(2016)/03%20-%20Bewajah%20-%20DownloadMing.SE.mp3", "image": "4.jpg"], 
     ["url" : "http://2016.downloadming1.com/bollywood%20mp3/Sanam%20Teri%20Kasam%20(2016)/04%20-%20Tera%20Chehra%20-%20DownloadMing.SE.mp3", "image": "5.jpg"], 
     ["url" : "http://2016.downloadming1.com/bollywood%20mp3/Sanam%20Teri%20Kasam%20(2016)/02%20-%20Kheech%20Meri%20Photo%20-%20DownloadMing.SE.mp3", "image": "6.jpg"], 
     ["url" : "http://media.downloadming.se/TEMP/Loveshhuda%20(2015)/01%20-%20Mar%20Jaayen%20-%20DownloadMing.SE.mp3", "image": "5.jpg"], 
     ["url" : "http://2016.downloadming1.com/bollywood%20mp3/Sanam%20Teri%20Kasam%20(2016)/01%20-%20Sanam%20Teri%20Kasam%20-%20DownloadMing.SE.mp3", "image": "7.jpg"], 
     ["url" : "http://2016.downloadming1.com/bollywood%20mp3/Sanam%20Teri%20Kasam%20(2016)/02%20-%20Kheech%20Meri%20Photo%20-%20DownloadMing.SE.mp3", "image": "1.jpg"]] 

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return self.objects.count 
    } 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! RadioCollectionViewCell 

     let object = objects[indexPath.row] 
     cell.url = object["url"]! 
     cell.img.image = UIImage(named: object["image"]!) 
     return cell 
    } 
} 

In meiner UICollectionViewCell Klasse

class RadioCollectionViewCell: UICollectionViewCell { 

    @IBOutlet weak var img: UIImageView! 

    var url : String! 

    var playerItem:AVPlayerItem? 
    var player:AVPlayer? 

    @IBAction func audioControlButtonAction(sender: UIButton) { 

     let nurl = NSURL(string: "\(url)")! 
     playerItem = AVPlayerItem(URL: nurl) 
     player=AVPlayer(playerItem: playerItem!) 

     if sender.selected == false { 

      player!.play() 
      sender.selected = true 

     }else 

     { 
      player?.pause() 
      sender.selected = false 
     } 
    } 
} 

Antwort

2

Sie jedes Mal, Audio-Wiedergabe oder nicht nicht überprüfen. Rufen Sie einfach player.pause() dann starten Audio-Wiedergabe mit player.play()

+2

Aber wenn ich auf mehr als eine Zelle drückte, begannen alle gleichzeitig Musik zu spielen. Ich will zu einer Zeit eine Zelle spielen Musik und ich möchte, wenn ich auf eine andere Zelle gedrückt gedrückten Zelle Musik wird automatisch stoppen und spielen derzeit Cell-Musik, wie dieser Player [https://github.com/marsluca/AudioPlayer] Dies ist Mein Projekt https://drive.google.com/file/d/0B29ka7gbDAYxSkNTdENabzB6UDA/view – ZAFAR007

+0

@ ZAFAR007 hier funktioniert Code. https://drive.google.com/open?id=0B7pt8RzeP7M-UElLZGdSaFlovWM – ivarun

+0

Vielen Dank, Sie haben mein Problem gelöst In wenigen Minuten :-) – ZAFAR007

0

nicht initialisieren Spieler in RadioCollectionViewCell, Es wird mehrere Instanzen Ihres Players erstellen. Also initialisiere den Player in viewcontroller in viewDidLoad nur einmal und benutze den gleichen Player, um Musik mit verschiedenen URLs aus verschiedenen Zellen zu spielen. So sollte Ihre Zelle nur URl (andere URL für verschiedene Musik) haben und implementieren didSelectItemAtIndexPath Methode und übergeben Sie URL von dieser Methode zu gemeinsamen Spieler und spielen von dieser Methode.

-Update wie in Kommentar fragen:

zum Beispiel

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){ 

var cell : UICollectionViewCell = collectionView.cellForItemAtIndexPath(indexPath)! 
cell.backgroundColor = UIColor.magentaColor() 
} 

hier Sie Spieler mit url initialisieren. Diese Methode wird aufgerufen, wenn die Zelle ausgewählt ist. also initialisiere den Spieler auf den Klick der Zelle und Wenn du array of url hast, kannst du eine bestimmte URL mit indexPath bekommen. also initialisiere Spieler und spiele von dieser Methode.

Edit:

Wenn Sie Schaltfläche in der Zelle verwenden zu spielen und dann Pause nicht über Code implementieren.

Ich habe festgestellt, dass Sie neue Spieler in Ihrem IBaction erstellen. benutze den gleichen Spieler. Sie können einen Standardspieler verwenden, der als öffentlich deklariert ist. Erstellen Sie nicht neu in Ibaction. Nimm die öffentliche Instanz von avplayer und benutze sie zum Abspielen von Musik. das ist es. hoffe, das wird helfen :)

+0

Können Sie bitte erklären, wie ich in didSelectItemAtIndexPath implementieren kann, habe ich versucht, aber nicht richtig Implementierung? – ZAFAR007

+0

überprüfe mein Update. Hier, was du falsch machst, hast du einen einzigartigen Spieler für eine einzigartige Zelle. wenn du nur einen Spieler verwendest und diesen Spieler 'nil' zuerst in Knopfklick machst und dann mit neuer URL initialisierst – Lion

+0

Danke, dass du mir geholfen hast :-) – ZAFAR007

0

Versuchen Sie die Einstellung der Rate standardmäßig auf 0.0 und zuweisen 1.0 nur, wenn Sie spielen.

@IBAction func audioControlButtonAction (Sender: UIButton) {

let nurl = NSURL(string: "\(url)")! 
    playerItem = AVPlayerItem(URL: nurl) 
    player=AVPlayer(playerItem: playerItem!) 
    player.rate = 0.0 
    if sender.selected == false { 
     player.rate = 1.0 
     player!.play() 
     sender.selected = true 

    }else 

    { 
     player?.pause() 
     sender.selected = false 
    } 
} 

oder Sie können durch Standard 0.0 Rate in didselect Methode eingestellt und dann 1,0 zuweisen nur wenn Sie spielen.

Hoffe, das funktioniert!

+0

Immer noch das selbe Problem? – ZAFAR007

+0

Aber als ich auf mehr als eine Zelle drückte, begannen alle gleichzeitig Musik zu spielen. Ich möchte zu einer Zeit eine Zelle spielen Musik und ich möchte, wenn ich auf eine andere Zelle drückte zuvor gedrückte Cell-Musik wird automatisch stoppen und spielen derzeit Cell-Musik, wie dieser Player [Github.com/marsluca/AudioPlayer] Dies ist mein Projekt [Laufwerk. google.com/open?id=0B29ka7gbDAYxSkNTdENABzB6UDA] Können Sie bitte überprüfen Sie es – ZAFAR007

+0

Hallo sieht aus wie Ihr Problem gelöst ist .... Holen Sie sich die aktualisierte Codebasis hier https://drive.google.com/open?id=0B7UCVsrOca0vSmgwS3BMa3ItM28 .. Es gab einen Fehler, dass Sie die play btn Aktion von tableviewcell class.so jedes Mal, wenn es unabhängige Instanz des Spielers zu erstellen .... immer Zelle Knopf Aktion sollten Sie behandeln von Controller das ist was ich getan habe ... und auch playeritem ist nicht hier erforderlich .. Player-Element verwenden wir normalerweise, wenn wir eine Playlist spielen. – Nitesh

Verwandte Themen