Прозрачное веб-представление: нижележащий слой иногда не виден - PullRequest
1 голос
/ 08 декабря 2011

В моем веб-приложении для iPhone на основе телефонной щели я реализовал плагин, который использует AVCaptureVideoPreviewLayer для фотографирования. Для этого, когда вызывается метод плагинов startCamera, я устанавливаю прозрачный фон веб-просмотра и вставляю слой видеозахвата ниже слоя веб-просмотра. Это работает как ожидалось (большую часть времени).

Но по какой-то странной причине, когда я запускаю startCamera в первый раз (после запуска нового приложения), видеослой не виден. Вместо этого веб-просмотр отображает белый фон, хотя цвет фона установлен на 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 Ответ

1 голос
/ 14 декабря 2011

Решено: Проблема состояла в том, что установка флага прозрачности веб-просмотра на NO не имела никакого эффекта, когда это было сделано в startCamera(). Чтобы исправить это, я установил непрозрачность веб-просмотра раньше - именно тогда, когда он был создан. Веб-просмотр без прозрачности не означает, что он прозрачный - вам также нужно установить цвет фона на [UIColor clearColor] (это то, что делается в startCamera(); в stopCamera() цвет фона устанавливается обратно на [UIColor blackColor]).

...