7

'u desteklediğinde aygıt yönünü nasıl algılayabilirim Çalıştığım sorun, bir kullanıcı uygulamanızla AVCaptureSession kullanarak bir fotoğraf çektiğinde, bunu belirlemenin hiçbir yolu yoktur. Fotoğrafı Dikey veya Yatay modda çekip çekmedikleri. Bizim app sadece Portrait'u destekliyor ve telefonumu kullanırken Oryantasyon Kilidini tutuyorum, böylece başkalarının da aynı şeyi yapabileceğini varsayarak bir çözüm üretmeye çalışıyorum.Yönlendirme Kilidi açıkken ve uygulama yalnızca Dikey

[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] numaralı telefonu kullanarak baktım ancak Yönlendirme Kilidi açıkken, hiçbir bildirim alınmadı. Bu işlevselliğin mümkün olduğunu biliyorum çünkü temel Kamera uygulaması ve Google Hangouts uygulamasındaki kamera, telefonumun Oryantasyon Kilidi açık olduğunda dönüşü algılayabilir (İptal ve Flaş düğmeleri üzerindeki animasyonlar belirgindir).

En iyi hız ivmeölçeri kullanmak ve telefonun döndürüleceği açıyı algılamak için en iyi yoldur mu? Eski bir cevap, Detect iPhone screen orientation, bu şekilde yapmanın kolay bir şekilde yapılmasının (UIAccelerometer yerine Core Motion'ı kullanmak için cevabı açıkça belirleyen) algılanmasını çok belirgin hale getirmektedir, ancak bunu yapmanın başka bir yolu varsa merak ediyorum.

cevap

1

Evet, görüntünün meta verilerine bakarak yapabilirsiniz. Ayrıntılı bir cevap yazmak için zamanım yok (bunun için üzgünüm), ama kendi projem için numaralı arabelleği için bir CMSampleBufferRef geçirdiğim bir süredir yaptım. Ben

,

captureStillImageAsynchronouslyFromConnection:stillImageConnection completionHandler: ^(CMSampleBufferRef imageDataSampleBuffer, NSError *error){} o tampon var ama siz de

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection adresinden elde edebilirsiniz.

Bu sözlüğe here tüm anahtar sözcüklerini bulabilirsiniz.

Yönlendirme kilidi açıkken varsayılan kamera uygulamasıyla hızlı bir test yaptım ve iki fotoğraf için farklı bir yönelim elde ettim. Portre 1 için 6 ve manzara için 3.

Yine, bu konuda size daha fazla ayrıntı vermeyi çok isterim, ancak eminim ki, dokümanlar aracılığıyla bunu anlayabilirsiniz.

+1

CMCopyDictionaryOfAttachments üzerindeki başlıklar için teşekkürler, meta verileri okumayı çok daha kolay hale getirir. 'CaptureStillImageAsynchronouslyFromConnection' kullanarak hala sadece yönlendirme alabiliyorum = 6. Uygulamanın Peyzaj modlarını etkinleştirdim, ancak boşuna. Bu soruna neden olan bir yerde gizlenmiş garip bir ortam olmadığından emin olmak için yeni bir uygulamaya bir marka denemeyi deneyeceğim. – TheJer

+1

“AVCaptureConnection * bağlantısına” sahip olduğunuzu varsayarsak, connection.videoOrientation'ı herhangi bir yere ayarlıyor musunuz? Ne denediğime bakılmaksızın, meta veriler, videoOrientation varsayılanı 'AVCaptureVideoOrientationPortrait' olduğu için anlamlı olan yönlendirme için 6 değerini döndürür. Bu da bana, yakalama yönünü değiştirmek için rotasyonu nasıl algılayacağımın orijinal sorusuna geri dönüyor. – TheJer

+0

Evet, sanırım bununla ilgili bazı sorunlar olduğunu hatırlıyorum. Maalesef şimdi daha da derine inmek için zamanınız yok. Ama mümkün olmalı, çünkü varsayılan kamera uygulaması bunu yapıyor ve bunun için sadece kendi özel API'lerini kullanma zorluğundan geçtiklerini sanmıyorum. – vegather

İlgili konular