2015-05-04 68 views
0

我正在使用MPMoviePlayerController播放视频。我想在视频播放结束后关闭视频。这里是我的代码:当播放完成后关闭视频Swift

import UIKit 
import MediaPlayer 

class programViewController: UIViewController { 

    var moviePlayer : MPMoviePlayerController? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    // Do any additional setup after loading the view. 
     playVideo("video", type: "mov") 
    } 

    func playVideo(navn:String, type:String) { 
    let path = NSBundle.mainBundle().pathForResource(navn, ofType: type) 
     let url = NSURL.fileURLWithPath(path!) 
     moviePlayer = MPMoviePlayerController(contentURL: url) 
     if let player = moviePlayer { 
      player.view.frame = self.view.bounds 
      player.prepareToPlay() 
      player.scalingMode = .AspectFit 
      player.shouldAutoplay = true 
      player.fullscreen = false 
      self.view.addSubview(player.view) 
     } 
    } 
} 

回答

0

很可能只是删除子视图的视图,因为最后做子视图是电影播放器​​视图中你可以通过使用此代码删除:

self.view.subviews[self.view.subviews.count-1].removeFromSuperview() 
0

您将需要监听MPMoviePlayerPlaybackDidFinishNotification通知。

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("playerPlaybackDidFinish"), name: MPMoviePlayerPlaybackDidFinishNotification, object: nil) 

// Present 
self.presentViewController(moviePlayer, animated: ture, completion: nil) 

// Dismiss 
moviewPlayer.dismissViewControllerAnimated(true, completion: nil) 
+0

我写了 “playerPlaybackDidFinish” FUNC里面有什么? – vladasha

+0

在我的理解中,你应该像这样呈现moviePlayer:self.presentViewController(mv,animated:ture,completion:nil) – Ramis

+0

然后解雇像这样:moviePlayer.dismissViewControllerAnimated(true,completion:nil) – Ramis

2

你应该加入调用playVideo功能

   NSNotificationCenter.defaultCenter().addObserver(self, selector: "movieFinishedCallback:", name: MPMoviePlayerPlaybackDidFinishNotification, object: player) 

,并在你的班组长:

func movieFinishedCallback(notif:NSNotification) { 
    // Obtain the reason why the movie playback finished 
    var userInfo:Dictionary<String,Int!> = notif.userInfo as! Dictionary<String,Int!> 

    let finishReason : Int = userInfo[MPMoviePlayerPlaybackDidFinishReasonUserInfoKey]! 

    // Dismiss the view controller ONLY when the reason is not "playback ended" 
    if (finishReason == MPMovieFinishReason.PlaybackEnded.rawValue) 
    { 
     let moviePlayer:MPMoviePlayerController = notif.object as! MPMoviePlayerController 

     // Remove this class from the observers 
     NSNotificationCenter.defaultCenter().removeObserver(self, name: MPMoviePlayerPlaybackDidFinishNotification, object: self.moviePlayerController!.moviePlayer) 

     // Dismiss the view controller 
     moviePlayer.view.removeFromSuperview() 
    } 
} 
+0

谢谢,队友!好的。 – Felipe

+0

看起来你只是在PlaybackEnded上解雇 – benaneesh

1

更新的版本@罗马barzyczak的回答是:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(movieFinishedCallback(_:)), name: MPMoviePlayerPlaybackDidFinishNotification, object: moviePlayer) 

则:

func movieFinishedCallback(notification: NSNotification) { 

    if let userInfo = notification.userInfo as? [String : NSNumber] { 
     let reason = userInfo[MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] 
     let finishReason = MPMovieFinishReason(rawValue: reason!.integerValue) 

     if (finishReason != MPMovieFinishReason.PlaybackEnded), 
      let moviePlayer = notification.object as? MPMoviePlayerController { 

      NSNotificationCenter.defaultCenter().removeObserver(self, name: MPMoviePlayerPlaybackDidFinishNotification, object: moviePlayer) 
      moviePlayer.view.removeFromSuperview() 
     } 
    } 
}