SpriteKit SKScene 添加 AVCaptureVideoPreviewLayer CALayer 作为背景不起作用

2024-04-29

我正在尝试将 AVCaptureVideoPreviewLayer CALayer 添加为 SKScene 的背景。我可以将 CALayer 添加到场景中,但无论尝试如何排序,CALayer 始终是最顶层的对象。

在 didMoveToView 中我有这个功能:

- (void) didMoveToView:(SKView *)view
{
    [self addVideo];

} 

其中调用了addVideo函数:

-(void) addVideo {

AVCaptureSession *captureSession = [[AVCaptureSession alloc] init];
captureSession.sessionPreset = AVCaptureSessionPresetHigh;

AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *videoIn = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:nil];

[captureSession addInput:videoIn];

AVCaptureVideoPreviewLayer *avLayer =
[AVCaptureVideoPreviewLayer layerWithSession:captureSession];
avLayer.frame = self.view.bounds;

CGSize landscapeSize;
landscapeSize.width = self.view.bounds.size.height;
landscapeSize.height = self.view.bounds.size.width;


CGRect landscapeRect;
landscapeRect.size = landscapeSize;
landscapeRect.origin = self.view.bounds.origin;

avLayer.frame = landscapeRect;

if(avLayer.connection.supportsVideoOrientation)
{
    avLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight;
}

[self.scene.view.layer insertSublayer:avLayer atIndex:0];
[self.scene.view.layer setNeedsLayout];


[captureSession startRunning];

}

我尝试了多种方法来获取 AVCaptureVideoPreviewLayer CALayer 作为背景。每次将节点添加到场景时,它都位于此 CALayer 之上,有什么建议吗?

尝试了以下功能:

- (void) sendSublayerToBack:(CALayer *)layer
{
   [layer removeFromSuperlayer];
    [self.view.layer insertSublayer:layer atIndex:0];
}

但还是不行....


不要在 SKView 层中显示该层 - 创建另一个 UIView 并将其放置在视图层次结构中,使其位于 SKView 后面。然后将视频层添加到该 UIView。

你必须使 SKView 透明,尽管在这里我不确定这是否有效 - 如果它完全像 cocos2d 一样工作:将 opaque 属性设置为 NO 并将 backgroundColor 属性更改为 nil (如果还没有 nil) 。这应该使 SKView 透明。

如果这些都不起作用,也许您可​​以找到使用 SKVideoNode 的解决方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpriteKit SKScene 添加 AVCaptureVideoPreviewLayer CALayer 作为背景不起作用 的相关文章

  • 在 Interface Builder 中的 View Effects Inspector 中选择 CALayer 有何作用?

    在IB内部 在View Effects Inspector中 有一个设置核心动画层的选项 如果我设置了它会做什么 是否相当于setWantsLayer YES 如果是这样 那么按照苹果文档 https developer apple com
  • 具有内边缘的 SpriteKit SKPhysicsBody

    我创建了一个SKSpriteNode比如说Map它有一个我定义的边缘路径 一些简单的多边形形状 我想弄清楚的是如何添加几个other将充当内部边缘的边缘路径Map 就好像整个 地图 实际上确实有holes 某种内部边界形状可以与Map整体
  • 如何使用 iOS 7 自定义过渡在顶部呈现半模态视图控制器

    我将如何在主视图控制器的顶部呈现 半视图 控制器 要求 呈现在主视图控制器顶部滑动的第二个视图控制器 第二个视图控制器应该只显示主视图控制器的一半以上 主视图控制器应在第二视图控制器后面保持可见 透明背景 下面不显示黑色 第二个视图控制器应
  • iOS7自定义ViewController转场和顶部布局指南

    我在我的应用程序中实现了自定义 UIViewController Transition 它取代了推送动画中内置的导航控制器 到目前为止 一切正常 除了新推送的视图控制器中的 toplayoutguide 为 0 尽管新视图控制器继承了旧视图
  • iOS 7 下 UITableView 部分索引相关崩溃

    我有一个简单的表视图部分索引 第一次看起来很好 但如果发生某些类型的交互 强制重新绘制部分索引 则崩溃 方法是 通过点击其中一个单元格来推动视图控制器 点击表视图标题中的搜索栏或以其他方式使其成为第一响应者 转到信息屏幕 然后返回带有该表视
  • 使用 iOS 7 SDK 构建时 UITextView 会自动换行

    我有一个UITextView里面一个UIScrollView效果很好iOS 6建造自xcode 4 x 但是现在构建xcode 5它无法正常工作 即使在iOS 6 问题是文本会随着屏幕宽度换行 即使UITextView and UIScro
  • 将默认的 InteractivePopGestureRecognizer 扩展到屏幕边缘之外?

    我有一个UIViewController被推送到导航堆栈上 我想扩展标准的 iOS7 交互式平移手势 以将此视图控制器弹出到默认值之外UIRectEdgeLeft边界 以便用户可以通过从视图上的任何位置平移来启动交互式后退操作 我尝试过滚动
  • AFNetworking 可以处理请求队列吗?

    我在 iOS 6 上的示例 需要 按顺序 向服务器发送 10 个 Multi Part 请求 所以请求形成一个队列 应显示进展情况 如果一个请求失败 则所有后续请求都会失败 请求队列应该是可取消的 AFNetworking 可以帮我解决这个
  • iOS 7 中的后台任务间隔时间

    我在 appdidEnterBackground 中有以下代码 我看到在 IOS 6 中我看到后台时间段约为 10 分钟 而 IOS 7 中的相同代码打印 2 分钟 这是代码 void applicationDidEnterBackgrou
  • '#selector' 的参数不引用 '@objc' 方法 (swift 3)

    我正在 SKScene 中设置滑动识别 我发现对所有识别器进行硬编码需要时间 而且不太整洁 所以我决定使用 for 循环和包含以下内容的字典 UISwipeRecognizers 作为键 并且 函数作为值 问题是 在尝试使用添加目标时 它给
  • videoMinFrameDuration 已弃用

    当我将 Xcode 从 4 6 更新到 5 1 时 ios7 中不推荐使用 videoMinnFrameDuration void setFrameRate NSInteger frameRate frameRate frameRate i
  • 指定随机粒子起始颜色而不进行动画更改?

    有没有办法让粒子根据当前的 颜色渐变 产生随机的每个粒子颜色 粒子在其生命周期内不会改变颜色 它们只是在出生时从 颜色渐变 的某个地方被分配了一种颜色 并保持该颜色直到它们死亡 其结果将是出生时的粒子与从红色到蓝色的混合颜色的混合 在我的测
  • 将视图控制器推送到 UINavigationController 中

    我有一个带有导航控制器的选项卡视图控制器 在第一个选项卡项中 我单击视图中的按钮 弹出一个带有动画的视图 是 然后 当该视图完成后 我点击另一个按钮将其关闭 喜欢 self dismissViewControllerAnimated NO
  • SpriteKit 中的攻击按钮

    我对 Xcode 有点陌生 一直在为我的班级制作 2d 游戏 我已经有一段时间遇到按钮问题了 我刚刚找到了为什么我的跳跃按钮不起作用的解决方案 但我还有一个攻击按钮 我设置了代码 使按钮显示在屏幕上并在按下时更改其图像 但是 我不知道要放入
  • 为什么 CGPath 和 UIBezierPath 在 SpriteKit 中对“顺时针”的定义不同?

    在 SpriteKit 中 clockwise方向相反UIBezierPath但不是为了CGPath 例如 如果我有 do let path CGPathCreateMutable CGPathAddArc path nil 0 0 10
  • 如何将不同层的核心动画一个接一个地链接起来?

    我有一个启用分页的scrollView和N个页面 它们是作为scrollView的子视图的UIView 我正在尝试执行以下操作 用户滚动到第 n 页 此时 之前添加到第 n 页的 7 个 CALayers 即 到页面 scrollView
  • IOS 7 UITextField resignFirstResponder 坏

    当我在自定义单元格内使用 UItextField 时 以及当我 resignFirstResponder 文本字段时 我发生崩溃 但它不再可见 表视图滚动到窗口外 我仍然可以找到文本字段 指针继续可访问 它不为空 并且崩溃仅发生在 IOS7
  • 无法实例化名为 GLKView 的类

    我得到了这个异常 2014 02 19 19 08 34 590 MyApp 42353 70b Terminating app due to uncaught exception NSInvalidUnarchiveOperationEx
  • 完成后未删除时如何重用 CABasicAnimation?

    很多人都在谈论在使用 CABasicAnimation 对象后保留它 所以通过设置 完成时删除 否 当动画完成时 动画对象保持附加到图层 在不创建新的 CABasicAnimation 的情况下 如何重新启动该动画 保留这个物体有什么意义呢
  • 在后台每 X 分钟执行一次函数不起作用

    我使用此代码每 X 分钟执行一次函数 void executeEveryOneMinute self myFunction dispatch after dispatch time DISPATCH TIME NOW int64 t 60

随机推荐