2013-02-11 14 views
12

Chcę zrobić zdjęcie aparatem za pomocą AVCaptureSession.iOS: orientacja kamery

Działa dobrze, uruchamiam kamerę i mogę uzyskać dane wyjściowe. Mam jednak pewne problemy z orientacją wideo, gdy obracam urządzenie.

Po pierwsze, chcę wspierać krajobraz lewy i prawy orientacje i mogą być tryby portretowe też później.

zaimplementować:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation{ 
return UIInterfaceOrientationIsLandscapse(interfaceOrientation); 
} 

Kiedy obrócić urządzenie obraca aplikację krajobraz z lewej do prawej lub odwrotnie krajobrazu, ale widzę tylko aparat poprawnie, kiedy jestem na poziomym lewo. Gdy aplikacja jest ustawiona poziomo, wideo obraca się o 180 stopni.

Dziękuję bardzo.

Aktualizacja:

Próbowałem Spectravideo328 odpowiedź, ale mam błąd, gdy próbuję obrócić urządzenie i aplikacja katastrofę. Jest to błąd:

[AVCaptureVideoPreviewLayer connection]: unrecognized selector sent to instance 0xf678210 

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AVCaptureVideoPreviewLayer connection]: unrecognized selector sent to instance 0xf678210' 

Błąd występuje w tej linii:

AVCaptureConnection *previewLayerConnection=self.previewLayer.connection; 

umieścić go wewnątrz metody shouldAutorotateToInterfaceOrientation. Czy wiesz, co może być przyczyną tego błędu?

Dzięki

Odpowiedz

23

Domyślna orientacja Aparat jest na tyle dziwnie UIInterfaceOrientationLeft.

Orientacja aparatu nie zmienia się wraz z obrotem urządzenia. Są oddzielne. Trzeba wyregulować położenie aparatu ręcznie:

umieścić następujące informacje w sposób, który możesz przekazać toInterfaceOrientation do (może to nazwać z shouldAutorotateToInterfaceOrientation powyżej tak, że obraca się urządzenie oraz kamera obraca się):

trzeba pobierz najpierw podgląd połączenia warstwowego

AVCaptureConnection *previewLayerConnection=self.previewLayer.connection; 

if ([previewLayerConnection isVideoOrientationSupported]) 
{ 
    switch (toInterfaceOrientation) 
    { 
     case UIInterfaceOrientationPortrait: 
      [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationPortrait]; 
      break; 
     case UIInterfaceOrientationLandscapeRight: 
      [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight]; //home button on right. Refer to .h not doc 
      break; 
     case UIInterfaceOrientationLandscapeLeft: 
      [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft]; //home button on left. Refer to .h not doc 
      break; 
     default: 
      [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationPortrait]; //for portrait upside down. Refer to .h not doc 
      break; 
    } 
} 
+0

To rozwiązanie nie działa dla mnie. Nic nie robi ... Rozwiązuję problem za pomocą [self.prevLayer setOrientation: [[UIDevice currentDevice] orientacja]]. Ale setOrientation jest przestarzałe, więc nie jest dobrym rozwiązaniem. Dzięki –

+2

@ A.Vila, wspomniałeś w pytaniu, orientacji kamery, a nie orientacji warstwy podglądu. Dla przyszłego odniesienia, AVCaptureSession tworzy 2 oddzielne połączenia (dla warstwy podglądu i wyjścia kamery) i będziesz musiał obracać oba oddzielnie !. Zaktualizowałem swoją odpowiedź do powyższej orientacji warstwy podglądu. – Spectravideo328

+0

Dzięki za odpowiedź. Próbowałem, ale mam błąd. Aktualizuję pytanie, podając informacje o błędzie. Czy wiesz, jaki jest problem? Wielkie dzięki. –

Powiązane problemy