[英]IOS swift avplayer inside UiView how can I make it work
我是剛開始使用AVPlayer for IOS swift並使其正常工作的新手。 但是,我希望視頻現在可以在UIView中播放,默認情況下,視頻占據了整個頁面。 我一直在嘗試一些事情,但是我的代碼在這里無效。 我在該頁面上還有其他內容,這就是為什么我希望UIView內的avplayer稱為newView的原因,並且當我將代碼放在下面時,它給了我一個錯誤。 我一直在關注UIView圖層中的此示例AVPlayerLayer位置
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
之所以收到錯誤消息,是因為您試圖呈現與您剛添加為子視圖控制器的CustomAVPlayerC
相同的實例。 您不需要提供VC,請嘗試以下代碼,這是一種更簡潔的方法:
@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)
}
我建議閱讀Apple關於“實現容器視圖控制器”的文檔,以獲取處理此類容器視圖的最佳實踐。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.