透明webview:底层有时不可见

时间:2011-12-07 22:02:09

标签: objective-c ios uiwebview cordova transparency

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

为什么第一次看不到相机图层的想法?

1 个答案:

答案 0 :(得分:1)

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