UiView 中的 IOS swift avplayer 我怎样才能让它工作

标签 ios swift swift3 uiview avplayer

我刚开始使用 AVPlayer for IOS swift 并使其正常工作。但是我希望视频现在可以在 UIView 中播放,默认情况下视频会占据整个页面。我一直在尝试一些事情,但我的代码在这里不起作用。我在那个页面上还有其他内容,这就是为什么我想要 UIVIEW 中的 avplayer,它被称为 newView ,当我把代码放在下面时,它给我一个错误。我一直在关注这个例子 AVPlayerLayer Position in UIView Layer

    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

最佳答案

您收到错误消息是因为您正在尝试呈现刚刚添加为 subview Controller 的 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 的文档 "Implementing a Container View Controller"了解处理像这样设置的容器 View 的最佳实践。

关于UiView 中的 IOS swift avplayer 我怎样才能让它工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45721588/

相关文章:

ios - UIButton 的 setFont 已弃用,我尝试了新方法但仍然失败

ios - 本地化 iOS 应用程序时路径无效 - Xcode 7

ios - NSAttributedString:非段落标题

swift - 在 Swift 4 中使用 Decodable 和继承

IOS- swift : OrPredicate in CloudKit results in invalid

swift - 如何根据 API 级别从 Swift 中的两个不同类派生一个类?

ios - 在 iOS(swift3)、Android 和 PHP 之间加密/解密

ios - 从录制的声音中消除已知音频,通过反卷积估计背景声级

ios - 在用户点击它们之前在后台处理通知 - Swift 3

ios - 以编程方式创建带有自定义 header 的 UICollectionView