我有一个 VC,用户可以在其中拍照或从他们的库中选择一张。
一旦拍摄/选择了照片,它就会传递给UIImageView
下一个 VC。
我想只在图像所在的方向上显示这个视图控制器。因此,如果用户在左侧横向拍摄照片(一旦他们选择使用),下一个视图控制器应该在横向左侧加载该图像在UIImageView
. 如果他们以纵向方式拍摄图像,则视图控制器以纵向方式加载。一旦 VC 以正确的方向加载,它就不应移动(再旋转)。
这是我迄今为止尝试过的,但无法让它按我的预期工作:
#pragma mark -
#pragma mark - Auto Rotation Overrides
- (BOOL)shouldAutorotate {
if (self.photoImage != NULL) {
// Check that photoImage has an image
if (self.photoImage.imageOrientation == 1 || self.photoImage.imageOrientation == 0) {
// Landscape left = 0, Landscape rigt = 1
return YES;
} else {
// Portrait normal = 3, portait upside down = 2
return NO;
}
}
// Fallback to portrait
return NO;
}
-(NSUInteger)supportedInterfaceOrientations {
if (self.photoImage != NULL) {
// Check that photoImage has an image
if (self.photoImage.imageOrientation == 0) {
return UIInterfaceOrientationMaskLandscapeLeft;
} else if (self.photoImage.imageOrientation == 1) {
return UIInterfaceOrientationMaskLandscapeRight;
} else {
return UIInterfaceOrientationMaskPortrait;
}
}
// Fallback to Portrait
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
if (self.photoImage != NULL) {
// Check that photoImage has an image
if (self.photoImage.imageOrientation == 0) {
return UIInterfaceOrientationLandscapeLeft;
} else if (self.photoImage.imageOrientation == 1) {
return UIInterfaceOrientationLandscapeRight;
} else {
return UIInterfaceOrientationPortrait;
}
}
// Fallback to Portrait
return UIInterfaceOrientationPortrait;
}
- - -编辑 - - -
在shouldAutoRotate
设备实际旋转之前不会调用,如何让它在 viewDidLoad 上自动根据图像方向更改方向。我看到该supportInterfaceOrientations
方法被调用并且只返回了一个景观,但没有立即移动视图......?
-----编辑2-----
IOS6preferredInterfaceOrientationForPresentation
也可以吗?我可以设置我的 Navigation Controller 子类来查看self.topViewControllers preferredInterfaceOrientationForPresentation
,但这似乎意味着每个 topViewController 都需要有这个方法。理想情况下,我想将子类设置为:如果 topViewController 对 有响应preferredInterfaceOrientationForPresentation
,则使用其他肖像/默认值。这可以做到吗?
如果是这样,我当然可以更新preferredInterfaceOrientationForPresentation
哪个会以正确的方向加载该 VC,然后shouldAutoRotate
控制它不会被旋转回另一个方向?