iPad iOS7 - UIImagePickerController in UIPopoverController falsche Vorschaubild

Bin ich mit einer UIImagePickerController innerhalb einer UIPopoverController, die perfekt funktioniert mit iOS6. Mit iOS 7 die "Vorschau" - Bild, das gezeigt wird, um zu erfassen das Bild wird gedreht, aber wenn ich ein Bild es ist richtig gespeichert.

Dies ist, wie ich meine picker:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.mediaTypes = [NSArray arrayWithObjects:
                              (NSString *) kUTTypeImage,
                              nil];
imagePicker.allowsEditing = NO;

Und fügen Sie es zu einem popover-controller:

self.imagePickerPopOver = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
    [self.imagePickerPopOver presentPopoverFromRect:CGRectMake(aPosViewA.x, cameraButton_y, 100.0, 30.0) inView:self.detailViewController.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

Sind diese Berechnungen für die button-position in einem UIScrollView, um zu zeigen, das popover in der richtigen position:

presentPopoverFromRect:CGRectMake(aPosViewA.x, cameraButton_y, 100.0, 30.0)

Ich glaube nicht, dass das problem dort liegt, da habe ich ausprobiert mehrere Kombinationen.

Ich habe auch versucht das Bild in den Vollbild-Modus, aber die app ist nur erlaubt, verwenden Sie das Querformat. Wenn das Bild genommen wird, im portrait-Modus und die modal view geschlossen wird, bleibt die app im portrait-Modus als auch. Ich konnte nicht einen Weg finden, um zu verhindern, dass die UIImagePickerController zu wechseln, um portrait-Modus oder zu zwingen, die app wieder zum landscape-Modus, wenn der modal-Ansicht wurde abgewiesen.

UPDATE

Ich habe die Antwort von hier und kam ein Schritt weiter.

Gestalte ich die Ansicht nach dem erstellen der picker und vor dem anzeigen der popover :

switch ([UIApplication sharedApplication].statusBarOrientation) {
        case UIInterfaceOrientationLandscapeLeft:
            self.imagePicker.view.transform = CGAffineTransformMakeRotation(M_PI/2);
            break;
        case UIInterfaceOrientationLandscapeRight:
            self.imagePicker.view.transform = CGAffineTransformMakeRotation(-M_PI/2);
            break;
        default:
            break;
    }

die funktioniert, solange ich don ' T turn around das iPad. Dafür bin ich der Registrierung für die Ausrichtung geändert-Ereignis:

[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(orientationChanged:)  name:UIDeviceOrientationDidChangeNotification  object:nil];

und ändern Sie den picker anzeigen:

- (void)orientationChanged:(NSNotification *)notification{

    if (self.imagePicker) {
        switch ([UIApplication sharedApplication].statusBarOrientation) {
            case UIInterfaceOrientationLandscapeLeft:
                self.imagePicker.view.transform = CGAffineTransformMakeRotation(M_PI/2);
                break;
            case UIInterfaceOrientationLandscapeRight:
                self.imagePicker.view.transform = CGAffineTransformMakeRotation(-M_PI/2);
                break;
            default:
                break;
        }
    }
}

VERBLEIBENDE PROBLEM:
Wie schrieb ich am Anfang, wenn das Bild aufgenommen wurde, war es richtig dargestellt annehmen oder es verwerfen. Dies ist jetzt verändert. Irgendwie muss ich wissen, Wann das Bild aufgenommen und transformiert es zurück.

Ja, das ist wirklich eine unangenehme hack und wahrscheinlich nicht funktionieren, mit dem nächsten iOS-Update. Hat jemand eine Idee wie man das umsetzen, dass ein sauberer Weg?

UPDATE 2

Das war zu böse, ich habe gefunden eine saubere Lösung, die löst mein problem aber ist nicht die Antwort auf die erste Frage in Bezug auf ein imagepicker in einem popover-controller, die nicht von Apple empfohlenen, aber erlaubt.

Ich habe Unterklassen jetzt die UIImagePickerController wie diese:

@implementation QPImagePickerController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscape;
}

@end

und ich bin mit dem imagepicker im Vollbildmodus statt in einem popover. Bisher getestet in iOS7.

  • Ich bin mit dem exakt gleichen problem. Ich kann nicht glauben, dass dies nicht eine weitere relevante Frage—wie wird es nicht brechen mehr apps?
  • Genau das gleiche problem, das nicht behoben werden im nächsten update?
  • Es sieht für mich das gleiche Problem betrifft die ios7 facebook-app, die über eine pop-up-Kamera.
  • in iOS7 iPad im Querformat nur app iam immer "UIApplicationInvalidInterfaceOrientation', reason: 'Unterstützt Orientierungen hat keine gemeinsame Ausrichtung mit der Anwendung und shouldAutorotate kehrt JA'
Schreibe einen Kommentar