2017-08-16 14 views
0

IOS swiftのAVPlayerを初めて使用していて、正しく動作しています。しかし、私はUIViewの内部でビデオを再生したいと思います。今、ビデオはデフォルトとしてページ全体を占めています。私はいくつかのことを試してきましたが、ここで働くものは私のコードです。私はそのページに他のコンテンツを持っています。なぜなら、UIVIEW内のavplayerをnewViewとしたいのですが、下のコードを入力するとエラーになります。私は、この例AVPlayerLayer Position in UIView LayerIOSスウィフトavplayerをUiViewの中でどうすれば動作させることができますか?

import UIKit 
import AVFoundation 
import WebKit 
import AVKit 

class ExampleTable: UIViewController { 
    @IBOutlet weak var newView: UIView! 

    let avPlayerViewController = CustomAVPLayerC() 
    var playerView: AVPlayer? 
    var AVLayer: AVPlayerLayer? 


    override func viewDidAppear(_ animated: Bool) { 

     let movieURL:NSURL? = NSURL(string: "my url") 

     playerView = AVPlayer(url: movieURL! as URL) 
     avPlayerViewController.player = playerView 
     playerView?.isMuted = true 
    avPlayerViewController.view.frame = newView.frame 
    newView.addSubview(avPlayerViewController.view) 
    addChildViewController(avPlayerViewController) 
     self.present(self.avPlayerViewController, animated: true) { 
      self.avPlayerViewController.player?.play() 

     } 

    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 


} 

を、次のされていますが、私は

2017-08-16 15:55:31.770 Yisly[24335:595275] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <app.ExampleTable: 0x7ff78201a650>.' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010aab9b0b __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x0000000109dec141 objc_exception_throw + 48 
    2 UIKit        0x000000010b910e44 -[UIViewController _presentViewController:withAnimationController:completion:] + 5146 
    3 UIKit        0x000000010c28e165 -[_UIViewControllerTransitionCoordinator _applyBlocks:releaseBlocks:] + 294 
    4 UIKit        0x000000010c28a0e4 -[_UIViewControllerTransitionContext _runAlongsideCompletions] + 155 
    5 UIKit        0x000000010c289dbc -[_UIViewControllerTransitionContext completeTransition:] + 118 
    6 UIKit        0x000000010b8d3b70 -[UITransitionView notifyDidCompleteTransition:] + 251 
    7 UIKit        0x000000010b8d37e8 -[UITransitionView _didCompleteTransition:] + 1408 
    8 UIKit        0x000000010b8d5eb8 -[UITransitionView _transitionDidStop:finished:] + 104 
    9 UIKit        0x000000010b7e6f07 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 222 
    10 UIKit        0x000000010b7e7446 -[UIViewAnimationState animationDidStop:finished:] + 136 
    11 QuartzCore       0x000000010b5ca68e _ZN2CA5Layer23run_animation_callbacksEPv + 306 
    12 libdispatch.dylib     0x000000010da4f05c _dispatch_client_callout + 8 
    13 libdispatch.dylib     0x000000010da3040b _dispatch_main_queue_callback_4CF + 411 
    14 CoreFoundation      0x000000010aa7e909 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9 
    15 CoreFoundation      0x000000010aa44ae4 __CFRunLoopRun + 2164 
    16 CoreFoundation      0x000000010aa44016 CFRunLoopRunSpecific + 406 
    17 GraphicsServices     0x000000010f203a24 GSEventRunModal + 62 
    18 UIKit        0x000000010b75b0d4 UIApplicationMain + 159 
    19 Yisly        0x0000000105c10117 main + 55 
    20 libdyld.dylib      0x000000010da9b65d start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
+2

remove self.present(self.avPlayerViewController、animated:true){...}? – HMHero

答えて

1

このエラーを取得する上で、あなたのCustomAVPlayerCの同じインスタンスを提示しようとしているので、私はあなたがエラーメッセージをコードを取得しているんときちょうど子ビューコントローラとして追加したものです。私はこのような設定のコンテナビューに対処する上でのベストプラクティスのため"Implementing a Container View Controller"にAppleのドキュメント上に行く推薦する

@IBOutlet weak var newView: UIView! 
let avPlayerViewController = CustomAVPlayerC() 
var playerView: AVPlayer? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    guard let movieURL = URL(string: "my url") 
     else { return } 

    playerView = AVPlayer(url: movieURL) 
    avPlayerViewController.player = playerView 
    avPlayerViewController.view.frame = newView.bounds 
    self.addChildViewController(avPlayerViewController) 
    newView.addSubview(avPlayerViewController.view) 
    avPlayerViewController.didMove(toParentViewController: self) 
} 

:あなたは少しクリーナーアプローチでこのコードを試してみてください、VCを提示する必要はありません。

+0

これは完璧だったし、今読んでくれてありがとう – user1591668

関連する問題