2012-10-16 32 views
9

Fotoğraf çekmeyi (kamera uygulaması gibi) simüle eden bir AV Foundation uygulamasına sahibim. Normalde aşağıdaki işler benim için çalışıyor, ancak bu durumda değil."Fotoğraf çekiliyor" ekranı yanıp sönüyor benzetimi

Bu kod, görünüm denetleyicimdeki bir eylem içinde yürütülür. Bir AVCaptureVideoPreviewLayer ekli olan tek bir tam ekran UIView (videoPreviewLayer) içerir. Animasyon yürütülür, ancak hiçbir şey gösterilmez. Ayrıca ARC, iOS 6, iPhone 4S, iPad3 kullanıyorum. Ek incelemeler sonucunda

// 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]]; 

NOT, flaş aralıklı rağmen gerçekleşiyor: Burada

// 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]; 
      } 
]; 

Ben AVCaptureVideoPreviewLayer takmak nasıl. Genel olarak başlamasından 5-10 saniye sonra görünür hale gelir. Ayrıca kodu bir kez aramamıza rağmen, hızlı bir şekilde iki kez çalıştırıldığını gördüm.

cevap

4

Sorunum, "Flash" kodunun bir AV Foundation geri çağrısından çağrılmasıydı. Geri çağrı, ana iş parçacığı üzerinde çalışmıyordu, dolayısıyla herhangi bir UI kodu doğru şekilde yürütülmedi.

dispatch_async(dispatch_get_main_queue(), ^{ /* execute flash code */ }); 
4

kodunuzu

let shutterView = UIView(frame: cameraView.frame) 
shutterView.backgroundColor = UIColor.black 
view.addSubview(shutterView) 
UIView.animate(withDuration: 0.3, animations: { 
    shutterView.alpha = 0 
}, completion: { (_) in 
    shutterView.removeFromSuperview() 
}) 
swift3 olarak: Bu çözüm böyle bir şey yapmak oldu
İlgili konular