Tíb*_*íbó 2 iphone uiviewcontroller ios
我有一个应用程序始终以纵向模式呈现(在Xcode项目的摘要中,仅支持纵向方向).
现在我想要做的是当我使用应用程序时,从应用程序的任何视图控制器,如果我在横向右侧旋转设备,该应用程序呈现景观中的视图控制器(ARViewController.m),实际上旋转到横向右侧是呈现ARViewController.m的触发器.但我所经历的是,因为第一个视图控制器只支持纵向,即使我将设备定位在横向右侧,我想要从第一个呈现的视图控制器(ARViewController.m)也是纵向的,而不是在景观权利.
即使我在第二个视图控制器(ARViewController.m)中写入它,它也不会自动旋转(此视图控制器可以在每个方向呈现):
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
return YES;
}
Run Code Online (Sandbox Code Playgroud)
在第二个视图控制器(ARViewController.m)显示为全部按顺序后,我必须旋转iphone一次.
这是我如何从第一个视图控制器调用第二个视图控制器(ARViewController.m):
ARViewController *arVC = [[ARViewController alloc] initWithNibName:@"ARViewController" bundle:nil];
[self presentModalViewController:arVC animated:YES];
Run Code Online (Sandbox Code Playgroud)
我从"ViewController.m"调用它,这个被定义为rootViewControllerAppDelegate.m中的.
这是我第一次做这样的事情,我寻找解决方案,但仍然是同样的问题.关于这个的任何提示?
我终于解决了这个问题,我想有其他选择,但这个工作正常:
事实上,我只保留了纵向限制.然后当我向右或向左转动手机时,我会以模态方式调用我的ARViewController,但在加载之前,我强制将此视图控制器设置为横向(在viewWillAppear中),方法如下所示进行适当的旋转:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self transformView2ToLandscape];}
-(void) transformView2ToLandscape {
NSInteger rotationDirection;
UIDeviceOrientation currentOrientation = [[UIDevice currentDevice] orientation];
if(currentOrientation == UIDeviceOrientationLandscapeLeft){
rotationDirection = 1;
}else {
rotationDirection = -1;
}
CGAffineTransform transform = [arController.viewController.view transform];
transform = CGAffineTransformRotate(transform, degreesToRadians(rotationDirection * 90));
[arController.viewController.view setTransform: transform];}
Run Code Online (Sandbox Code Playgroud)
编辑:在Swift 4中
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
transformViewToLansdcape()
}
func transformViewToLansdcape(){
var rotationDir : Int
if(UIDeviceOrientationIsLandscape(UIDevice.current.orientation)){
rotationDir = 1
}else{
rotationDir = -1
}
var transform = self.view.transform
//90 for landscapeLeft and 270 for landscapeRight
transform = transform.rotated(by: (rotationDir*270).degreesToRadians)
self.view.transform = transform
}
extension BinaryInteger {
var degreesToRadians: CGFloat {
return CGFloat(Int(self)) * .pi / 180
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4188 次 |
| 最近记录: |