ОК, поэтому мне удалось разобраться в этом. Следует отметить, что класс UIImagePickerController поддерживает портретный режим только в соответствии с Apple documentation.
Для захвата вращения willRotateToInterfaceOrientation
здесь бесполезен, поэтому вам необходимо использовать notificatons. Кроме того, установка ограничений автоопределения во время выполнения - это не путь.
В AppDelegate didFinishLaunchingWithOptions
вам нужно с поддержкой уведомлений вращения:
// send notification on rotation
[[UIDevice currentDevice]beginGeneratingDeviceOrientationNotifications];
В viewDidLoad
способе cameraOverlayView UIViewController
добавить следующее:
//add observer for the rotation notification
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
Наконец, добавьте метод orientationChanged:
к cameraOverlay UIViewController
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
double rotation = 0;
switch (orientation) {
case UIDeviceOrientationPortrait:
rotation = 0;
break;
case UIDeviceOrientationPortraitUpsideDown:
rotation = M_PI;
break;
case UIDeviceOrientationLandscapeLeft:
rotation = M_PI_2;
break;
case UIDeviceOrientationLandscapeRight:
rotation = -M_PI_2;
break;
case UIDeviceOrientationFaceDown:
case UIDeviceOrientationFaceUp:
case UIDeviceOrientationUnknown:
default:
return;
}
CGAffineTransform transform = CGAffineTransformMakeRotation(rotation);
[UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
self.btnCancel.transform = transform;
self.btnSnap.transform = transform;
}completion:nil];
}
В приведенном выше коде применяется преобразование вращения на 2 UIButtons, которые я использую в этом случае btnCancel и btnSnap. Это дает вам эффект приложения «Камера» при вращении устройства. Я все еще получаю предупреждение в консоли <Error>: CGAffineTransformInvert: singular matrix.
не знаю, почему это происходит, но это как-то связано с видом камеры.
Надеюсь, что это поможет.
задал тот же вопрос некоторое время назад - http://stackoverflow.com/questions/15377120/uiimagepickercontroller-record-video-with-landscape-orientation, к сожалению, до сих пор нет хорошего ответа. –
Ну, я пробормотал с помощью Autolayout Constraints в xcode, но они явно специфичны для привязки элементов к текущему дну ориентации, а не к дну оригинального портрета. Следующей попыткой я попытаюсь установить противопоказания во время выполнения с помощью команды '- (void) willRotateToInterfaceOrientation: (UIInterfaceOrientation) toInterfaceOrientation duration: (NSTimeInterval) duration' Есть ли у вас какие-либо предложения, хотя @Aaron? – pechar