5 Stimmen

UIImagePickerController überlagern autorotate

Ich verwende den UIImagePicker für den Zugriff auf die Kamera in meiner iPhone-App. Ich würde gerne zwei verschiedene Overlays für den Imagepicker haben, je nach Ausrichtung des iPhones. Ist es möglich, dies zu tun? Es scheint, wenn ich die folgende Methode in der Klasse platziere, die den UIImagePickerController besitzt, wird sie überhaupt nicht aufgerufen, und in jedem uiviewcontroller darüber wird sie nur aufgerufen, wenn der UIImagePickerController nicht aktiv ist.

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
   NSLog(@"shouldAutorotate called");
   return YES;
}

Haben Sie eine Idee, wie man den gewünschten Effekt erzielen kann?

3voto

Nimrod Punkte 5168

Die Dokumentation sagt, dass der UIImagePickerController nur Hochformat unterstützt, so könnte es sein, dass es keine unterstützte Möglichkeit gibt, dies zu tun.

Wenn Sie presentModalViewController:animated verwenden, um den Imagepicker anzuzeigen, dann glaube ich, dass nur der modale Controller Meldungen wie shouldAutorotateToInterfaceOrientation erhält.

Normalerweise könnte man UIImagePickerController subclassen, um die entsprechenden Methoden zu überschreiben, aber es scheint, dass subclassing auch nicht unterstützt wird.

Ich vermute, dass Sie tatsächlich UIAccelerometer verwenden und manuelle Ansicht Rotation auf Ihre Overlay-Ansicht als Reaktion auf Beschleunigung Nachrichten tun müssen.

Edit:

Versuchen Sie es mit [NSNotificationCenter addObserver: für UIDeviceOrientationDidChangeNotification.

0 Stimmen

Ich schlage vor, Sie versuchen, was Nimrod am Ende vorschlägt: [NSNotificationCenter addObserver: für UIDeviceOrientationDidChangeNotification. Ich habe dies getan und meine eigene 90-Grad-Affin-Transformation auf ein paar Schaltflächen und Beschriftungen angewendet, und dann, wenn der ImagePicker entlassen wird, verwenden Sie die Geräteausrichtung, um die Ausrichtung zu erraten, die der Benutzer für das Bild beabsichtigt. Es ist etwas umständlich, aber es funktioniert, und ich glaube nicht, dass es Apple beleidigt. Aber es ist keine echte AutoRotation.

0 Stimmen

Oder, besser als die beabsichtigte Drehung zu erraten, verwenden Sie myimage.imageOrientation .

0voto

Andres Punkte 2860

Anhand der Rohdaten des Beschleunigungssensors kann man feststellen, wann das Overlay ausgetauscht werden muss - das war's!

0voto

Moazzam Punkte 24

Sie können die Overlay-Ansicht mit der Eigenschaft transform von Overlay wie folgt drehen

cameraOverlayView.transform = CGAffineTransformMakeRotation(-3.141592/2);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X