SpriteKit SKScene添加AVCaptureVideoPreviewLayer CALayer作为后台无法正常工作

时间:2013-10-28 21:21:11

标签: ios7 core-animation sprite-kit

我正在尝试将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];
}

但仍然没有工作......

1 个答案:

答案 0 :(得分:3)

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

你必须让SKView透明,虽然在这里我不确定这是否有效 - 如果它的工作方式与cocos2d一样:将opaque属性设置为NO并将backgroundColor属性更改为nil(如果不是已经没有了)。这应该使SKView透明。

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