2011-12-07 32 views
1

在我的基於phonegap的iPhone網絡應用程序中,我實現了一個使用AVCaptureVideoPreviewLayer拍照的插件。爲此,在調用插件的startCamera方法時,我將webview的背景設置爲透明,並將視頻捕獲層插入到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]; 
} 

任何想法,爲什麼相機層不是第一個可見時間?

+0

你的START CAMERA方法在哪裏? –

回答

1

解決了它:問題是,設置webview的不透明度標誌爲NOstartCamera()中完成時沒有任何影響。爲了解決這個問題,我在之前設置了webview的不透明度 - 就在它創建時。不透明的webview並不意味着它是透明的 - 你也需要設置背景顏色爲[UIColor clearColor](這是在startCamera()中完成的;在stopCamera()中,背景顏色設置回[UIColor blackColor])。

+0

謝謝,這幫助我解決了我的問題,即使將webview的opaque = NO和背景顏色設置爲[UIColor clearColor],Cordova webview也不透明。解決方法是在創建時儘早設置不透明標誌,而在放置html元素之後需要設置clearColor,因爲放置html元素時,cordova會覆蓋clearColor。 – Bruce