Поворот камеры и OverlayView в iOS8
У меня возникла проблема при использовании iPad Camera в iOS 8. Я видел некоторые старые вопросы и ветку на форумах разработчиков Apple во время бета-тестирования, но до сих пор не нашел решения.
Кажется, есть две части этого вопроса.
1) Сама камера вращается, когда вращается ориентация устройства, например, мир на его стороне
2) При открытии камеры в альбомной ориентации наложение не появляется. При открытии в Портретном это нормально.
Это приложение, использующее iOS7 в качестве базового SDK, проблема возникает только при запуске приложения на устройстве, которое было обновлено до iOS8. Приложение не использует раскадровки, оно использует перья.
Я надеюсь выпустить исправление для этого с помощью Xcode 5.1.1, прежде чем перейти к конкретным исправлениям для iOS8 и использовать его в качестве базового SDK в следующей версии.
Вот мой код для вызова камеры:
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == YES) {
// Create Camera
imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.delegate = self;
imagePicker.showsCameraControls = NO;
// Set up custom controls view
[[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
self.overlayView.frame = imagePicker.cameraOverlayView.frame;
imagePicker.cameraOverlayView = self.overlayView;
self.overlayView = nil;
// Show Camera
[self presentViewController:imagePicker animated:NO completion:nil];
[imagePicker release];
}
Я также пытался
И макет панели инструментов (сидит внизу) в OverlayView:
Если я изменю это, чтобы сидеть "наверху", это появляется и в портретном и в альбомном! Так что это должно быть связано с размером представления / окна / чего-либо, хотя странно, как его поведение изменится, если макет останется прежним.
Я попробовал это с обоими showsCameraControls = YES
и хеширование OverlayView
блок, и проблема № 1 сохраняется, так что это не связано с оверлеем в приложении.
Я надеюсь, что кто-то нашел ответ на этот вопрос, это кажется довольно распространенной проблемой.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Редактировать 1: Исправлено наложение (выпуск № 2)
Он не применял ориентацию к OverlayView, исправил это так:
// Grab the window frame and adjust it for orientation - from http://stackru.com/a/15707997/520902
UIView *rootView = [[[UIApplication sharedApplication] keyWindow]
rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect screenFrame = [rootView convertRect:originalFrame fromView:nil];
...
self.overlayView.frame = imagePicker.cameraOverlayView.frame;
Я подозреваю, что это связано с тем, что камера не понимает, что она также ориентирована, и будет продолжать искать решение проблемы #1.
Редактировать 2: Обновление по вопросу № 1
Похоже, что вращение камеры может быть проблемой Apple. На iOS8, если вы откроете приложение "Контакты", отредактируете контакт и выберете "Сделать фотографию", возникнет точно такая же проблема - в приложении Apple по умолчанию!
Я до сих пор не могу найти решение, поэтому я просто разрушаю и воссоздаю imagePicker
при каждом изменении ориентации на данный момент это ужасно, но будет достаточно, пока Apple не выпустит исправление или не появится лучшее решение.