我有一个自定义相机叠加层,像所有相机视图一样,默认为横向模式。我有一些方向变化逻辑,可以检测方向变化,以便旋转我放置的按钮和视图。此外,我已编辑了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 没有在视图控制器中被调用。我敢打赌这与问题有关。
self.cameraImagePicker.view
吗?如果是的话,可以删除self.cameraImagePicker.view.transform = CGAffineTransformIdentity;
然后看看是否有任何变化,尽管如果视图控制器告诉视图不要旋转,这实际上不应该发生任何变化... - larsacus