2015-01-20 2 views
1

В Swift, похоже, нет сообщений SO dismissMoviePlayerViewControllerAnimated, поэтому я думаю, что я убью вещи.ОтклонитьMoviePlayerViewControllerAnimated не работает в Swift

У меня есть ячейка таблицы, когда вы долго нажимаете на нее, она отображает видео. Когда видео заканчивается, моя цель - вернуть пользователя обратно в представление таблицы. Эта последняя часть - это бит, который не работает.

Любая помощь здесь будет принята с благодарностью. Я прочитал документы Apple и некоторые сообщения об этом в Objective-C. Кажется, что ответ заключается в том, чтобы запустить dismissMoviePlayerViewControllerAnimated, метод на UIViewController, но он не работает.

import UIKit 
import MediaPlayer 

class ViewController: UIViewController { 
    var moviePlayer:MPMoviePlayerController! 

    @IBOutlet weak var longPressView: UIView! 
    let longPressRec = UILongPressGestureRecognizer() 

    func longPressedView() { 
     playVideo() 
    } 

    func videoHasFinishedPlaying(notification: NSNotification){ 
     println("Video finished playing") 

     self.dismissMoviePlayerViewControllerAnimated() 
     // not returning me to the ViewController 
    } 

    func playVideo() { 
     // get path and url of movie 
     let path = NSBundle.mainBundle().pathForResource("IMG_8602", ofType:"MOV") 
     let url = NSURL.fileURLWithPath(path!) 
     moviePlayer = MPMoviePlayerController(contentURL: url) 

     // construct the views 
     moviePlayer.view.frame = self.view.bounds 
     self.view.addSubview(moviePlayer.view) 
     moviePlayer.fullscreen = true 

     // remove controls at top and bottom of video 
     moviePlayer.controlStyle = MPMovieControlStyle.None 

     // add event observer for videoHasFinsihedPlaying 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoHasFinishedPlaying:", 
     name: MPMoviePlayerPlaybackDidFinishNotification, object: nil) 
    } 

override func viewDidLoad() { 
     super.viewDidLoad() 

     longPressRec.addTarget(self, action: "longPressedView") 
     longPressView.addGestureRecognizer(longPressRec) 
     longPressView.userInteractionEnabled = true 

     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

ответ

1

Ваш код не работает, потому что вы используете MPMoviePlayerController вместо MPMoviePlayerViewController.

Вы звоните:

self.dismissMoviePlayerViewControllerAnimated() 

но нет MPMoviePlayerViewController уволить. Вот почему ничего не происходит.

Если вы предпочитаете использовать MPMoviePlayerController (как в коде, который вы отправили), добавив вручную его view, вы также должны вручную удалить его.

+1

Спасибо, медведь с ним. Я изменил все элементы MPMoviePlayerController на 'MPMoviePlayerViewController'. Это также требует, чтобы я назвал 'moviePlayer.moviePlayer.controlStyle = MPMovieControlStyle.None' (обратите внимание на двойной' moviePlayer'. Первое - это имя var, второе - метод 'MPMoviePlayerViewController' –