iOS强制横向在一个viewController中

时间:2015-07-06 11:38:42

标签: ios objective-c uiinterfaceorientation

爵士

我正在制作mapview模块,其中横向是唯一允许的方向,但其他方面仅限于纵向。当在设备ios 7和8上运行时,视图控制器仍然呈现为纵向,除非我必须手动将设备转为横向。你能告诉我还有什么其他步骤吗?

以下是我的代码

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window; 
@property (nonatomic)  BOOL isTaskPoint;

@end

AppDelegate.m

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) return YES;
    return NO;
}

PreviousController.m

MapViewController * sliderVC = [[MapViewController alloc] init ];
AppDelegate *appDelegate = (AppDelegate *) [UIApplication sharedApplication].delegate;

appDelegate.isTaskPoint = TRUE;
sliderVC.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:sliderVC animated:NO completion:nil];
sliderVC.view.backgroundColor =  [UIColor clearColor];

//   MapSwift maps =

MapViewController.h
- (void)bannerTapped:(UIGestureRecognizer *)gestureRecognizer {
    AppDelegate *appDelegate = (AppDelegate *) [UIApplication sharedApplication].delegate;

    appDelegate.isTaskPoint = FALSE;
    [self dismissViewControllerAnimated: NO completion:nil];
}

的MapViewController

- (BOOL) shouldAutorotate {
    return YES;
}


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscapeRight;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation ==  UIInterfaceOrientationLandscapeRight|| interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

2 个答案:

答案 0 :(得分:0)

有一个真正有效的技巧。 您可以访问状态栏并设置其方向。下次以模态方式显示视图时,这将变为活动状态。 但是,在显示模态后,您可以删除模态显示的视图控制器。当您在同一方法中执行此操作时,用户将不会注意到任何关联。 现在设备具有所需的方向。您现在可以安全地推动您想要处于另一个方向的视图控制器。

从该视图控制器返回时,不要忘记将其向后旋转!

查看此问题的答案。它附带了一些代码片段。 Force controllers to Change their orientation in Either Portrait or Landscape

答案 1 :(得分:-1)

如果要在某些视图控制器中禁用或启用特定方向,则this可能对您有所帮助。

如果您想以特定方向打开某个视图,请在viewDidLoad

中使用它
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];