2013-09-26 14 views
23

Mein Bildauswahl-Controller in Popover-Controller eingestellt. Auf iOS 6 funktioniert alles super, aber auf iOS 7 wird das Bild gedreht und alle Bewegungen machen Vers: Beim Drehen links geht das Bild nach unten, beim Hochziehen nach links, etc.ios 7 Bilderwähler in Popover falsches Verhalten

Hier ist der Code zum Anzeigen meine Kamera:

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

Meine app verwendet nur Landscape-Modus, jetzt Bild gedreht wird: enter image description here

Antwort

17

Als Apple's Official Doc sagte:

Präsentieren Sie die Benutzeroberfläche. Führen Sie dies auf dem iPhone oder iPod touch modal (Vollbild) durch, indem Sie die Methode presentViewController: animated: completion: des derzeit aktiven View-Controllers aufrufen und Ihren konfigurierten Image-Picker-Controller als neuen View-Controller übergeben.

Auf iPad, der richtige Weg, um ein Bild-Picker sind abhängig von seiner Quelle Art zu präsentieren, wie sie in dieser Tabelle zusammengefasst:

  • Kamera-Foto: Verwenden Sie Vollbild
  • Bibliothek gespeichert: a verwenden müssen popover
  • Fotos Album: Muss ein popover verwenden

...

Wenn Sie auf dem iPad einen Quelltyp von UIImagePickerControllerSourceTypeCamera angeben, können Sie den Bildwähler modal (Vollbild) oder mit einem Popover darstellen. Jedoch empfiehlt Apple, dass Sie die Kamera-Schnittstelle nur Vollbild präsentieren.

Obwohl es sagte „Sie das Bild Picker modal präsentieren können (Vollbild) oder durch einen popover mit“, wie Sie durch die Verwendung eines popover sehen mit diesem seltsamen Problem führen wird. Ich denke, das könnte ein Fehler auf iOS 7 SDK sein.

Ich versuche immer noch, dieses Problem zu beheben, aber für jetzt, die einzige Art, wie ich sagen kann, ist, es zu zeigen modal von

-presentViewController:animated:completion: 

Methode, die in den gesamten Bildschirm ausfüllt (Eigentlich habe ich don nicht so.

Und es gibt eine THREAD darüber in Apples Dev Forums diskutiert, können Sie einen Blick darauf werfen. ;)

+0

dort .. weiß jemand dies für die Lösung einige Arbeit um sein sollte? – Tarun

+0

@Tarun noch nicht, ich wählte nur Vollbild für diesen Fall zu zeigen. Ich werde diese Antwort aktualisieren, wenn ich eine bessere Lösung habe. :) – Kjuly

+0

Warum benutzt du nicht AvFoundation statt UIImagePicker? – Vidhyanand

0

Der einzige Weg, die ordnungsgemäß in iOS7 Arbeit wird mit dem

-presentViewController: animated: Fertigstellung:

Sie können versuchen, Kameraansicht Transformation von cameraViewTransform Eigenschaft zu ändern, aber Ergebnis wird hässlich sein. Das Hinzufügen einer Ansicht zu benutzerdefiniertem ViewController (die zu Landschaft drehen) wird Ihnen auch hässliche Ergebnisse geben. Ich fange an, diese OS-Version zu hassen.

+0

hat nicht funktioniert .. Auch kann nicht für eine Transformation gehen ein bisschen Hack. – Tarun

+1

iOS 7 brach viele bestehende Codes !!! Verursache mir viel Ärger. – Emmy

6

Versuchen Sie Folgendes:

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

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

Verwandte Themen