objective-c - 透明网页 View : underlying layer sometimes not visible

标签 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];
}

为什么相机层第一次不可见有什么想法吗?

最佳答案

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

关于objective-c - 透明网页 View : underlying layer sometimes not visible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423209/

相关文章:

javascript - 使用 UIWebView 时奇怪的填充/边距

ios - 如何在 iOS 中将我的所有 View 设为 navigationController?

iphone - 与一名人类玩家模拟回合制游戏中的回合顺序

php - JSON 输出重音问题

swift - stringByEvaluatingJavaScriptFromString

iphone - 使用js更改UIWebView的href值

ios - Cocoapods 重复符号 - Google API

ios - UIbarbutton蓝色而不是背景图片

ios - 比较类给出了不正确的输出

ios - iOS App Swift 上的 didTapInfoWindowOfMarker