【问题标题】:Transparent webview: underlying layer sometimes not visible透明 webview:底层有时不可见
【发布时间】:2012-01-15 10:19:34
【问题描述】:

在我基于 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];
}

任何想法为什么相机层第一次不可见?

【问题讨论】:

  • 你的 START CAMERA 方法在哪里?

标签: objective-c ios uiwebview cordova transparency


【解决方案1】:

已解决: 问题是,将 webview 的不透明度标志设置为 NOstartCamera() 中完成时没有任何效果。为了解决这个问题,我之前设置了 webview 的不透明度——就在它创建的时候。没有不透明度的 webview 并不意味着它是透明的 - 您还需要将背景颜色设置为 [UIColor clearColor](这是在 startCamera() 中所做的;在 stopCamera() 中,背景颜色设置回 @ 987654326@).

【讨论】:

  • 谢谢,这帮助我解决了 Cordova webview 不透明的问题,即使我将 webview 的 opaque=NO 和背景颜色设置为 [UIColor clearColor]。解决方案是在创建时尽早设置 opaque 标志,而 clearColor 需要在放置 html 元素之后设置,因为在放置 html 元素时 clearColor 会被cordova覆盖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 2021-03-11
  • 2020-06-23
相关资源
最近更新 更多