У меня есть пользовательское наложение камеры, которое, как и все виды камеры, по умолчанию в ландшафтном режиме.У меня есть некоторая логика изменения ориентации, которая определяет, когда меняется ориентация, чтобы я мог вращать размещенные мной кнопки и виды.Кроме того, я отредактировал метод shouldAutoRotateInterfaceTo, чтобы он не вращался при включенной камере:
- (BOOL)shouldAutorotateToInterfaceOrientation
(UIInterfaceOrientation)interfaceOrientation {
if (cameraIsOn) {
return NO;
}
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
Проблема : вид камеры по-прежнему поворачивается в портретный режим, когда я наклоняю камеру вПейзаж.Это приводит к тому, что устройство находится в альбомной ориентации, а вид в книжной ориентации, работает за пределами экрана.
Если это помогает, вот метод, который я использую для обнаружения изменений ориентации и преобразования моих кнопок:
- (void)cameraOrientationChanged {
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
CGAffineTransform transform;
switch (orientation) {
case UIDeviceOrientationPortrait:
transform = CGAffineTransformIdentity;
self.rotatePrompt.hidden = NO;
break;
case UIDeviceOrientationPortraitUpsideDown:
//transform = CGAffineTransformMakeRotation(180*M_PI/180);
transform = CGAffineTransformIdentity;
self.rotatePrompt.hidden = NO;
break;
case UIDeviceOrientationLandscapeLeft:
//transform = CGAffineTransformMakeRotation(90*M_PI/180);
self.rotatePrompt.hidden = YES;
transform = CGAffineTransformIdentity;
break;
case UIDeviceOrientationLandscapeRight:
//transform = CGAffineTransformMakeRotation(-90.0*M_PI/180);
transform = CGAffineTransformMakeRotation(180*M_PI/180);
self.rotatePrompt.hidden = YES;
break;
default:
transform = CGAffineTransformIdentity;
break;
}
self.shootButton.transform = transform;
self.cameraTypeButton.transform = transform;
self.photoLibraryButton.transform = transform;
self.changeCameraDirectionButton.transform = transform;
self.flashButton.transform = transform;
self.videoTimerLabel.transform = transform;
self.closeCameraButton.transform = transform;
}
Примечание Казалось, что все работало нормально, прежде чем я обновился до iOS 5.
Подробнее Посмотрев намой файл Xib, я вижу, что я создал наложение в портретном режиме.Когда наложение камеры поворачивается, оно переходит в портретный режим, когда устройство помогает в альбомной ориентации.
Еще более странно, когда бы это ни происходило (это не всегда происходит), я заметил, что shouldAutorotateToInderfaceOrientation не вызываетсяв контроллере вида.Могу поспорить, что это как-то связано с проблемой здесь.