2011-10-13 21 views
6

IOS 4 & 5'te sağlanan AVFoundation çerçevesini kullanarak bir kamera uyguladım, ancak tamamlama işleyici bloğunun hiçbir zaman çağrılmadığı captureStillImageAsynchronouslyFromConnection:completionHandler: işleviyle tutarsız bir sorun yaşıyor. Deklanşör sesi patlamaz ve önizleme bu durumda donar.iOS AVFoundation captureStillImageAsynchronouslyFromConnection: completionHandler: Süresiz Asılı

Hem Apple (WWDC 2010 & 2011 videoları) hem de Apple olmayan kılavuzları (blog ve SO gönderileri), fotoğraf çözünürlüğünde sabit bir görüntü yakalamayı çok az iyileştirme veya iyileştirme olmadan uyguladı. Xzx47 koşullarında tutarlı bir şekilde yeniden üretim yapabildim:

  • Eğer flaşı AVCaptureFlashModeAuto olarak ayarlıyorum ve düşük ışıkta fotoğraf çekersem tamamlanma bloğunu asar ve hiç çalıştırmaz. Flaş patlar, ancak deklanşör sesi duyulmaz. Aynı kodla, deklanşör sesinin patladığı, flaşın olmadığı ve tamamlama bloğunun çalıştığı normal ışıkta fotoğraf çekebiliyorum.
  • flashMode değerini ayarlamam veya kapalı olarak ayarlamam gerekirse, bazı fotoğraflar çekebilirim, ancak küçük bir sayıdan sonra (genellikle 1 ile 5 arasında), tamamlama bloğu durur. Açıklama için bir senaryo olabilir:
    1. Bir fotoğraf çekin ve onay ekranında görüntüle
    2. Fotoğraf ekranına geri dönün
    3. Tekrar 1 & 2 tekrarlayın
    4. Bir fotoğraf çekin ve fotoğrafı kilitleyin tamamlama bloğundan önce.
    5. Uygulamam

      Arabirim bir ViewController'da ve tüm AVFoundation öğelerini ele almak için ayrı bir sınıfta ele aldım. AVFoundation malzemelerini ele alan ayrı sınıfın örnek değişkeni ViewController'da. Örnek uygulamalardan farklı, ama neden bu tür ara sıra bir hataya neden sebep olduğunu anlamıyorum.

      • [stillImageOutput isCapturingStillImage] kontrol ederken bile, yanlış dönmeye devam edecek ve captureStillImageAsynchronouslyFromConnection
      • fonksiyonunu çalıştırmaya devam edecek. Başka bir uygulamaya geçersem, telefonu kilitle, diğer bazı işlemleri gerçekleştir. uygulamada, veya 'Take Photo' düğmesine bir milyon kez bir hata döndürmek için tamamlama bloğunu alabiliyorum. Hangi eyleme göre farklıdırlar. Ortak olanları 11800, 11801 ve 11830'dur. Asmakla ilgisiz gibi görünüyorlar.
      • Test telefonumuzu (iPhone 4 GSM) eninde sonunda işleyip işlemeyeceğini görmek için bir saatliğine bekledim. Nafile.

      Kaybolabileceğim bir şey olup olmadığını, bir mülkün ya da bir çalışmayla ilgili bilinen bir sorunun olup olmadığını bilmek isterim.

      Teşekkürler.

      (Benzer bir gönderi gördüm, fakat cevapların hiçbiri sorunumu çözemedi. Uygulamada Photo res'e ihtiyacım var. Referans için: iPhone SDK 4 AVFoundation - How to use captureStillImageAsynchronouslyFromConnection correctly?)

cevap

6

, muhtemelen yardımcı olurdu herkes zaten bu görüntüleme, ancak:

Kamera Flaş süreyi üzerinde önemli bir etkiye sahiptir yeterince çıkıyor o Bir şeyi zaman uyumsuz olarak yakalarken sorunlara neden olacak şekilde görüntüyü işlemek için alır. Bildirim tamamlandıHandler bloğundan gönderilmeden önce yakalama oturumunu yanlışlıkla sonlandırdım.

- (void) saveImageFromCamera { 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageCapturedFromCamera) name:@"FTW_imageCaptured" object:nil]; 

    [cameraController captureStillImage]; 
    // WRONG: Session was stopped here before 
} 

- (void) imageCapturedFromCamera { 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"FTW_imageCaptured" object:nil]; 

    [sharedAppController setBackgroundImage:[cameraController stillImage]]; 
    sharedAppController.imageFromCamera = YES; 
    [self endCamera]; 
    // CORRECT: Should have stopped session here 

    [self updateBackgroundImage]; 
} 

Umarım bu, böyle bir şeye dönüşen başkalarına yardımcı olabilir.

İlgili konular