在我基于 phonegap 的 iPhone 网络应用程序中,我实现了一个使用 AVCaptureVideoPreviewLayer
拍照的插件。为此,当调用插件的 startCamera
方法时,我将 webview 的背景设置为透明,并将视频捕获层插入到 webview 层下方。这按预期工作(大部分时间)。
但由于某些奇怪的原因,当我第一次执行 startCamera
时(在重新启动应用程序之后),视频层不可见。相反,webview 显示白色背景,尽管背景颜色设置为 clearColor
。对于所有后续执行,视频层都是可见的。
这就是我要向相机展示的内容:
AVCaptureSession * session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetHigh;
AVCaptureVideoPreviewLayer * videoLayer =
[[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
videoLayer.frame = self.webView.bounds;
CALayer *webViewLayer = self.webView.layer;
[webViewLayer.superlayer insertSublayer:videoLayer below:webViewLayer];
// ... session setup excluded
[session startRunning];
[self.webView setBackgroundColor:[UIColor clearColor]];
[self.webView setOpaque:NO];
在 stopCamera()
中,我执行以下操作:
if (session) {
[session stopRunning];
}
[self.webView setBackgroundColor:[UIColor blackColor]];
[self.webView setOpaque:NO];
if (videoLayer != nil) {
[videoLayer removeFromSuperlayer];
}
为什么相机层第一次不可见有什么想法吗?
最佳答案
解决了: 问题是,将 webview 的不透明度标志设置为 NO
在 startCamera()
中完成时没有任何效果.为了解决这个问题,我之前设置了 webview 的不透明度——就在它创建的时候。没有不透明度的 webview 并不意味着它是透明的 - 您还需要将背景颜色设置为 [UIColor clearColor]
(这是在 startCamera()
中所做的;在 stopCamera()
中,背景颜色设置回 [UIColor blackColor]
)。
关于objective-c - 透明网页 View : underlying layer sometimes not visible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423209/