- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个类似于您在 QuickTime Player 等媒体播放查看器中所期望的 View 层次结构:
+ Host View
+ Video Controls (NSView layer-backed)
+ Video View (NSView layer-hosted)
+ AVPlayerLayer
由于层托管 View 不能包含 subview ,因此视频控制 View 是视频 View 的同级 View ,并且只是顺序排列在前面,以便它位于视频 View 的顶部。
当前的 View 层次结构似乎对我来说工作得很好,但由于重叠的同级 View (视频控制 View 总是与视频 View 重叠),我仍然对它是否被正式“支持”感到有点困惑。
此堆栈溢出问题:Is there a proper way to handle overlapping NSView siblings?提供有关重叠同级 View 的冲突信息。
我认为处理此问题的更“正确”方法是将视频控件作为视频 View 的 subview ,这只有我将视频 View 从图层托管 View 更改为图层才有可能 -支持的 View 。
默认情况下,图层支持的 View 使用基本 CALayer
作为其后备存储,但是 NSView
暴露makeBackingLayer
允许您返回自定义图层,例如 AVPlayerLayer
。
通过这样做,并将控件 View 移动为该层支持的视频 View 的 subview ,一切似乎也正常工作,但现在有一个 AVPlayer
直接修改 AVPlayerLayer
内容的对象。这似乎违背了以下要求:在图层支持的 View 中,您不应该在不经过 NSView
的情况下修改图层的内容。使用类似drawRect
的东西或updateLayer
。
这似乎给我留下了两个选择,根据我对文档的解释,这两个选择都不“正确”:
选项 1:
AVPlayerLayer
的层托管 View 选项 2:
AVPlayerLayer
的后层 View 通过makeBackingLayer
AVPlayer
直接修改 AVPlayerLayer
的内容我倾向于认为选项 #2 是更正确的方法,在这种情况下,对于 AVPlayer
来说是可以的。直接修改AVPlayerLayer
的内容尽管它处于分层支持的 View 中,但我不确定并且很好奇其他人是否对这样的设置有任何想法或经验。
最佳答案
Apple 有一些旧的(在计算机术语中是古老的,2007 年!)代码,如果不进行一些调整,它们甚至无法在 Xcode 6 中编译。它显示了一些覆盖 QuickTime 影片层的控件。在这里下载:https://developer.apple.com/library/mac/samplecode/CoreAnimationQuickTimeLayer/Introduction/Intro.html .
很难说仅仅因为他们提供了源代码就被认为是最佳实践,但我建议您按照您认为最好的方式构建它。这并不是那些发展得如此充分以至于可能存在最佳实践的领域之一。对我个人来说,使用重叠的同级 View 是最有意义的,以确保您不会扰乱视频渲染。这是否正确可能有些主观。您也许可以访问旧的 Quicktime 开发人员邮件列表之一,甚至可以在 Apple 开发人员论坛上提问。但归根结底,您可能应该坚持使用对您来说最有意义的方法,因为您将来可能会维护或构建它。
关于objective-c - 使用 AVPlayerLayer 作为 NSView 的支持层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29556802/
我使用以下命令设置 AVPlayerLayer: audioPlayer = [[AVPlayer alloc]initWithURL:[NSURL fileURLWithPath:f
我有一个自定义的UITableViewCell,它显示图像或视频。如果有视频,它会在加载并准备播放视频时首先下载并显示该视频的缩略图。 一切正常,问题是我获取缩略图的比例,将其存储在数据库中,当我下载
我有一个令人困惑的问题。我在我的类中声明了这些变量: var audioPlayer = AVPlayer() var videoPlayer = AVPlayer() var videoLayer
我一直在尝试让 AVPlayerLayer 在我的应用程序中播放从互联网上下载的视频。然而,尽管有所有在线帮助,我似乎无法让它工作。这是代码: import UIKit import CoreGrap
注意:我接受 Xamarin.iOS、Objective-C 或 Swift 中的任何答案。如果您需要帮助阅读 Xamarin 代码,我可以为您解决这个问题,但考虑到此处代码的“复杂性”,应该没问题。
我有一个奇怪的问题。我有一个表格 View ,它的单元格包含一个视频。我将 AVPlayerLayer 设置为拉伸(stretch)到单元格的大小,但是当 tableview 首次加载时,它不会这样做
我试图让 AVPlayerLayer 填充单元格空间,但是通过设置 frame 属性,它不会改变它的大小。 在我的自定义单元格文件中: override init(style: UITableVie
我正在使用 AVPlayerLayer 播放视频。视频没有声音。但是,如果用户正在后台播放音乐并且显示了 AVPlayerLayer,则音乐会停止。如果用户向上滑动并点击播放,视频将停止。 我什至已经
我有一个带有 UIImageView 的旋转木马对象,我试图在其中对 AvPlayerLayer 进行子层处理。 虽然它没有填满 _videoView 的整个边界,但它工作得很好,它的高度看起来更小,
我试图在 有时 工作的 AVPlayerLayer 中显示本地录制的视频。我可以听到录制视频的声音,但看不到视频。有时视频和音频都在工作,有时只有音频。 我已经尝试使用 AVPlayerLayer 和
每当我更改 AVPlayerLayer 的框架时,视频不会立即调整大小,而是根据新大小进行动画处理。 例如:我将帧从 (0, 0, 100, 100) 更改为 (0, 0, 400, 400), Vi
我有两种观点 其中一个是AVPlayerLayer的容器,如下所示 containerView.layer.addSublayer(playerLayer) containerView 有自己关于 s
我正在使用 AVPlayerLayer 在我的 UIViewController 实例的后台播放视频。当我在 iPhone 上启动我的应用程序时,我注意到放大镜的显示方式有误。视频规范:H.264、A
我正在开发一个应用程序,其中提要中有循环播放的视频(在表格 View 单元格内)。可以同时存在多个视频,但可能只有一个正在播放。我在后台创建 AVPlayer,并将它们的 playerLayer 作为
我似乎无法从我拥有的 URL 中获取视频的高度。每次我记录playerLayer.videoRect.bounds.size.height返回0.000。关于如何根据视频调整playerLayer的高
我看到很多人想要播放透明背景视频的帖子。这不是我在这里想要实现的目标。 我正在尝试设置整个图层的不透明度。下面是我如何设置图像层的不透明度。我尝试了相同的方法来设置视频层的不透明度,但当我尝试淡入淡出
在 Main.storyboard 窗口中添加了一个 View Controller 组件。 View as: Iphone8 选项在 Main.storyboard 窗口中被选中 TestViewC
我不想用 AVPlayerLayer 重现实时照片缩放效果。为此,我使用 VideoView: class VideoView: UIView { override class var lay
我正在尝试使用此代码显示视频: self.videoPlayer = AVPlayer.init(url: videoUrl as URL) let playerLayer = AVPlayerLay
我有一个位于 collectionView 单元中的 AVPlayer,它位于 collectionView 中,位于 collectionView 单元中。 总而言之,我的每个单元格中都有一个 Co
我是一名优秀的程序员,十分优秀!