Ho un'app AV Foundation che simula scattare una foto (come l'app della fotocamera). Normalmente il seguente funziona per me, ma non è in questo caso.Simulare uno schermo "foto scattata" flash
Questo codice viene eseguito all'interno di un'azione nel mio controller di visualizzazione. Contiene un singolo UIView a schermo intero (videoPreviewLayer) a cui è associato AVCaptureVideoPreviewLayer. L'animazione viene eseguita ma non viene visualizzato nulla. Nota anche che sto usando ARC, iOS 6, iPhone 4S, iPad3.
// Flash the screen white and fade it out
UIView *flashView = [[UIView alloc] initWithFrame:[[self videoPreviewView] frame]];
[flashView setBackgroundColor:[UIColor whiteColor]];
[[[self view] window] addSubview:flashView];
[UIView animateWithDuration:1.f
animations:^{
[flashView setAlpha:0.f];
}
completion:^(BOOL finished){
[flashView removeFromSuperview];
}
];
Ecco come Attribuisco l'AVCaptureVideoPreviewLayer:
// Setup our preview layer so that we can display video from the camera
captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
CALayer *viewLayer = videoPreviewView.layer;
viewLayer.masksToBounds = YES;
captureVideoPreviewLayer.frame = videoPreviewView.bounds;
[viewLayer insertSublayer:captureVideoPreviewLayer below:[[viewLayer sublayers] objectAtIndex:0]];
NOTA Dopo ulteriori indagini, il flash è in corso, anche se in modo intermittente. Generalmente sembra essere visibile circa 5-10 secondi dopo che dovrebbe iniziare. Ho anche visto accadere eseguire due volte in rapida successione anche se chiamo il codice una volta.