2015-05-29 187 views
2

所以我想用MPMusicPlayer使用它的网址播放歌曲。我已经能够将音乐信息从MPMediaCollection填充到UITableView。我想要做的是当我点击tableview行时播放的歌曲在tableview行中具有相同的标题。如何在MPMusicplayerController上播放歌曲URL?

这里是我的代码如何填充音乐信息

func mediaPicker(mediaPicker: MPMediaPickerController!, 

    didPickMediaItems mediaItemCollection: MPMediaItemCollection!){ 



     for thisItem in mediaItemCollection!.items as! [MPMediaItem]{ 



      var mediaitem = mediaItemCollection!.items 



      playlistItem = ["music" : mediaitem] 

      playlistItemArray.addObject(playlistItem!) 



      let itemUrl = thisItem.valueForProperty(MPMediaItemPropertyAssetURL) 

       as? NSURL 



      let itemTitle = 

      thisItem.valueForProperty(MPMediaItemPropertyTitle) 

       as? String 



      let itemArtist = 

      thisItem.valueForProperty(MPMediaItemPropertyArtist) 

       as? String 



      var itemArtwork: AnyObject! = thisItem.valueForProperty(MPMediaItemPropertyArtwork) 

      if (itemArtwork != nil) { 

       var listArtwork = itemArtwork.imageWithSize(CGSizeMake (198, 198)) 

       var listArtworkData = UIImagePNGRepresentation(listArtwork) 



       playlistArtwork = ["picture" : listArtworkData] 

       playlistArtworkImage.addObject(playlistArtwork!) 

      }else{ 

       var listNulArtwork = UIImage(named: "noArtworkImage.png") 

       var listNulArtworkData = UIImagePNGRepresentation(listNulArtwork) 

       playlistArtwork = ["picture" : listNulArtworkData] 

       playlistArtworkImage.addObject(playlistArtwork!) 

      } 



      playlist = ["title" : itemTitle! , "artist" : itemArtist! , "songUrl" : itemUrl!] 

      playlistArray.addObject(playlist!) 



     } 



} 

这里是代码,我如何填充数据的tableview

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 


    let cell = tableView.dequeueReusableCellWithIdentifier("playlistCell", forIndexPath: indexPath) as! UITableViewCell 

    let object = User.playList[indexPath.row] as! NSDictionary 
    let artworkObject = User.playlistArt[indexPath.row] as! NSDictionary 

    let base64String = artworkObject["picture"]!.base64EncodedStringWithOptions(.allZeros) 

    let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0)) 
    var decodedimage = UIImage(data: decodedData!) 

    (cell.contentView.viewWithTag(1) as! UIImageView).image = decodedimage 
    //(cell.contentView.viewWithTag(1) as! UIImageView).image = image.timelinecircleMask 
    (cell.contentView.viewWithTag(2) as! UILabel).text = object["title"] as? String 
    (cell.contentView.viewWithTag(3) as! UILabel).text = object["artist"] as? String 

    return cell 
} 

,这里是我的我的播放列表的tableview的截图

enter image description here

我从MPMediaCollection获得的是mpmediaitem和歌曲信息(标题,艺术家,网址)字典

如何在播放uitableview行时播放歌曲?

回答

1

所以,是的,我已经解决了这个问题我自己。这真的很简单其实

我做

第一件事是:

声明MPMediaItemcollection作为一个全局变量(放在一个结构

则:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    tableView.deselectRowAtIndexPath(indexPath, animated: false) 

    var mediaItemCollection = User.mdci 
    MPMusicPlayerController().nowPlayingItem = mediaItemCollection!.items[indexPath.row] as! MPMediaItem 
    MPMusicPlayerController().play() 

    getPlayingSongInfo() 

} 

就这样

0

我建议使用AVAudioPlayer来播放歌曲。

声明属性是这样的:

@property (strong, nonatomic) AVAudioPlayer *audioPlayer; 

初始化您的播放器这样的:

self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url  
                  error:&error]; 
    if (error) { 
     NSLog(@"%@", [error localizedDescription]); 
    } 

播放的歌曲使用:

[audioPlayer play]; 
+0

感谢您的回答,我已经自己解决了:)。我只是制作mpmediacollection golobal,然后我把play动作放到didSelectRowAtIndexPath –

相关问题