1
class MyClass: UIViewController {

var playerViewController = AVPlayerViewController()
var playerView = AVPlayer()
var playerTimer = NSTimer()


override func viewDidAppear(animated:Bool) {
    super.viewDidAppear(true)
    presentViewController(GameViewController1(), animated: false, completion: nil)
    let fileURL = NSURL(fileURLWithPath: "SomeFile.mp4")

    playerView = AVPlayer(URL: fileURL)

    playerViewController.player = playerView

    self.presentViewController(playerViewController, animated: false){
        self.playerViewController.showsPlaybackControls = false
        self.playerViewController.player?.play()
        self.playerTimer = NSTimer.scheduledTimerWithTimeInterval(4.2, target: self, selector:Selector("stopAfter4seconds:"), userInfo: nil, repeats: false)
    }
}
func stopAfter4seconds(timer: NSTimer){
    playerViewController.player = nil
    playerViewController.removeFromParentViewController()
    playerTimer.invalidate()
    playerViewController.presentViewController(GameViewController1(), animated: false, completion: nil)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()


}

}

「MyClass」(Class Above) でビデオを再生した後

次に、ビューを削除し、GameScene を持つ GameContollerView1 を提示します。
(下のクラス)

class GameViewController1: UIViewController, ADBannerViewDelegate {


@IBOutlet var skView: SKView!

override func viewDidLoad() {
    super.viewDidLoad()


    if skView.scene == nil {
        let scene = GameScene(size: skView.bounds.size)
        skView.presentScene(scene)
    }
}

override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        return UIInterfaceOrientationMask.AllButUpsideDown
    } else {
        return UIInterfaceOrientationMask.All
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

override func prefersStatusBarHidden() -> Bool {
    return true
}

}

私の最初の問題は、クラス「GameViewController1」を提示するとエラーが発生することです。

 fatal error: unexpectedly found nil while unwrapping an Optional value
  (lldb) 

この行で:

if skView.scene == nil {

つまり、私の SKView! 私のifステートメントからわかるように、これはnilです。とにかく探していたものです。

これに関する最も奇妙な部分は、「MyClass」をスキップして、最初に StoryBoard エントリ ポイントを GameViewContoller1 にポイントすると、すべてのコードが正しく再生されることです。

AVPlayer() はこれと関係がありますか? 論理的には私のコードは機能するはずですが、何らかの理由で..そうではありません。どんな助けでも大歓迎です。

4

1 に答える 1

0

OP Answer: AppDelegate に戻り、そこから GameViewController1 クラスを呼び出すことになりました。それを理解するのに少し時間がかかりましたが、これは私のためにそれを行った全体的なコードです:

let gameScene = UIStoryboard(name: "Main", bundle:nil).instantiateViewControllerWithIdentifier("GameViewController1") as UIViewController
    let appDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
    appDelegate.window?.rootViewController = gameScene

このコードを ViewDidDisappear に入力して、AVplayer を非表示にし、新しいビューをロードします :).. これにどれほどの時間がかかったのか、あなたにはわかりません。

ヒント: これをある種の ViewDidLoad またはいずれかのビュー メソッドに入れていることを確認してください。そうしないと、「Expected Declaration」というエラーが発生します。

于 2015-12-01T08:38:06.853 に答える