【发布时间】:2011-11-07 16:24:36
【问题描述】:
我有一个自定义的相机叠加层,与所有相机视图一样,它默认为横向模式。我有一些方向更改逻辑,可以检测方向何时更改,以便我可以旋转已放置的按钮和视图。另外,我编辑了 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。我敢打赌这与这里的问题有关。
【问题讨论】:
标签: iphone ios camera rotation