2

我的 iOS 应用程序支持除 PortraitUpsideDown 之外的所有方向。但是在应用程序中,我有一个带有偏好的视图,我希望它只以纵向显示。因此,无论何时显示此视图,都会根据需要对其进行旋转,使其处于纵向模式。这意味着用户也将在纵向模式下旋转设备以设置首选项,然后在关闭此视图界面后现在应该具有纵向。问题是,隐藏首选项视图后,界面保持横向,因为在显示此视图后我阻止了自动旋转。因此,隐藏视图后,我想手动将界面更新为当前设备方向。我该怎么做?


self.view.hidden=NO;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
self.view.alpha=1.0;
[UIView commitAnimations];

此代码在其父视图上的 LongPressGesture 之后从 OptionsViewController 调用。

4

3 回答 3

2

基于 Marek R 提出的解决方案,我创建了一个 UIViewController 扩展来强制更新控制器的方向。由于 iOS 的新版本,他的解决方案不再起作用。我在这里发布我的解决方案来强制更新方向(为了考虑到控制器支持的方向方法)而不会产生副作用。希望能帮助到你。

UIViewController *vc = [[UIViewController alloc]init];
[[vc view] setBackgroundColor:[UIColor clearColor]];
[vc setModalPresentationStyle:(UIModalPresentationOverFullScreen)];
[self presentViewController:vc animated:NO completion:^{
    dispatch_async(dispatch_get_main_queue(), ^{
        [vc dismissViewControllerAnimated:YES completion:completion];
    });
}];
于 2016-05-11T10:51:14.080 回答
0

您所要做的就是将以下内容添加到您正在使用的视图控制器中以满足您的偏好。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
于 2012-06-13T11:34:07.880 回答
0

调用此解决方法对我有用:

-(void)forceOrientationUpdate {
    UIViewController *c = [[UIViewController alloc]init];
    [self presentModalViewController:c animated:NO];
    [self dismissModalViewControllerAnimated:NO];
    [c release];
}
于 2014-10-14T14:29:31.940 回答