2013-09-26 13 views
23

Mój kontroler widok wyboru zdjęć ustawiony wewnątrz kontrolera popover. W systemie iOS 6 wszystko działa świetnie, ale w systemie iOS 7 obraz jest obracany, a wszystkie ruchy robią zwrotkę: podczas obracania lewego obrazu na iPada spada, podczas przesuwania obrazu w lewo itp.Wybieracz obrazu ios 7 wewnątrz popover złe zachowanie

Oto kod pokazujący mój aparat:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 

    objPopView = [[UIPopoverController alloc] initWithContentViewController:imagePicker]; 
    [objPopView presentPopoverFromRect:CGRectMake(842, 163, 0, 0) 
           inView:self.view 
       permittedArrowDirections:UIPopoverArrowDirectionRight 
           animated:YES]; 

Moja aplikacja używa tylko trybu krajobraz, teraz obraz jest obrócony: enter image description here

Odpowiedz

17

Jako Apple's Official Doc powiedział:

Przedstaw interfejs użytkownika. W przypadku telefonu iPhone lub odtwarzacza iPod touch wykonaj to modalnie (pełny ekran), wywołując metodę obecnie animowanego podglądu: presentViewController: completion:, przekazując skonfigurowany kontroler selektora obrazów jako nowy kontroler widoku.

Na iPad, prawidłowy sposób przedstawić próbnika obrazu zależy od jego typu źródła, jak przedstawiono w poniższej tabeli:

  • Aparat: Stosować pełny ekran
  • Biblioteka zbawiony musi używać popover
  • Zdjęcia albumu: Musi użyć popover

...

Na iPadzie, jeśli określisz typ źródła UIImagePickerControllerSourceTypeCamera, możesz zaprezentować wybór obrazu modalnie (pełny ekran) lub za pomocą popover. Jednakże, Apple zaleca zaprezentowanie interfejsu aparatu tylko na pełnym ekranie.

Choć powiedział „można przedstawić modally obraz kompletacji (pełny ekran) lub za pomocą popover”, jak widać za pomocą popover spowoduje z tej dziwnej sprawie. Przypuszczam, że to może być błąd na SDK iOS 7.

Ja wciąż próbuje rozwiązać ten problem, ale na razie, jedynym sposobem mogę powiedzieć to, aby pokazać je modally przez

-presentViewController:animated:completion: 

metody, która jest na pełnym ekranie (faktycznie, I don tak ci się podoba).

I o tym dyskutowaliśmy na THREAD na forach deweloperów Apple, możesz rzucić okiem na to. ;)

+0

nie powinno być około jakąś pracę dla rozwiązywania tego .. czy ktoś wie? – Tarun

+0

@Tarun jeszcze nie, po prostu zdecydowałem się pokazać na pełnym ekranie dla tej sprawy. Zaktualizuję tę odpowiedź, gdy mam lepsze rozwiązanie. :) – Kjuly

+0

dlaczego nie używasz AvFoundation zamiast UIImagePicker? – Vidhyanand

0

Jedynym sposobem, który działa prawidłowo w iOS7 korzysta z

-presentViewController: animowane: Zakończenie:

Można spróbować zmienić widok kamery transformację posesją cameraViewTransform ale rezultat będzie brzydki. Dodanie widoku do niestandardowego ViewController (który obraca się do pejzażu) da Ci także brzydkie wyniki. Zaczynam nienawidzić tej wersji.

+0

nie działa. Ponadto, nie może przejść do transformacji w rodzaju hack. – Tarun

+1

iOS 7 złamał wiele istniejących kodów !!! Sprawia mi wiele kłopotów. – Emmy

6

Spróbuj wykonać następujące czynności:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
imagePicker.delegate = self; 
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 

CGFloat scaleFactor=1.3f; 

switch ([UIApplication sharedApplication].statusBarOrientation) { 

    case UIInterfaceOrientationLandscapeLeft: 

     imagePicker.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * 90/180.0), scaleFactor, scaleFactor); 

     break; 

    case UIInterfaceOrientationLandscapeRight: 

     imagePicker.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -90/180.0), scaleFactor, scaleFactor); 

     break; 

    case UIInterfaceOrientationPortraitUpsideDown: 

     imagePicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI * 180/180.0); 

     break; 

     default: 
      break; 
    } 

objPopView = [[UIPopoverController alloc] initWithContentViewController:imagePicker]; 
[objPopView presentPopoverFromRect:CGRectMake(842, 163, 0, 0) 
          inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionRight 
          animated:YES]; 

kredytowej https://stackoverflow.com/a/19071958/1363779

Powiązane problemy