2011-12-07 16 views
1

私のphonegapベースのiPhone web-appでは、AVCaptureVideoPreviewLayerを使って写真を撮るプラグインを実装しました。これを行うには、プラグインのstartCameraメソッドが呼び出されたときに、Webビューの背景を透明に設定し、ビデオキャプチャレイヤーをWebビューのレイヤーの下に挿入します。これは期待通りに機能します(ほとんどの場合)。透明なwebview:下層が表示されない場合があります

しかし、奇妙な理由で初めてstartCameraを実行すると(新しいアプリの開始後に)、ビデオレイヤーは表示されません。代わりに、背景色はclearColorに設定されていますが、webviewは白い背景を表示します。後続のすべての実行では、ビデオレイヤーが表示されます。

これは私がカメラを表示するためにやっているものです:

stopCamera()
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]; 

私は次のようにします。

if (session) { 
    [session stopRunning]; 
} 
[self.webView setBackgroundColor:[UIColor blackColor]]; 
[self.webView setOpaque:NO]; 
if (videoLayer != nil) { 
    [videoLayer removeFromSuperlayer]; 
} 

カメラ層は、第1のために表示されていない理由を任意のアイデアは、時間?

+0

あなたのSTART CAMERAメソッドはどこですか? –

答えて

1

はそれを解決:問題は、それがstartCamera()で行われていたときNOへのWebViewの不透明度フラグを設定すると、任意の効果を持っていなかったということでした。それを修正するために、Webビューの不透明度を、作成直後に設定しました。無不透明度のWebViewはそれが透明であることを意味するものではありません - あなたはまた、[UIColor clearColor]に背景色を設定する必要があります(これはstartCamera()で行われているものである。stopCamera()に背景色が[UIColor blackColor]に戻って設定されています)。

+0

ありがとうございました。これは、私がwebviewの不透明度= NOと背景色を[UIColor clearColor]に設定しても、Cordova webviewが透明でないという問題を解決するのに役立ちました。解決策は、作成されたときに不透明フラグを早期に設定することですが、html要素を配置するときにclearColorがcordovaによって上書きされるため、html要素が配置された後にclearColorを設定する必要があります。 – Bruce

関連する問題