
iPhone和iPad设备有4个方向,我们可以根据应用程序的当前方向调整界面.
为了使应用程序支持不同的方向,首先我们需要在项目设置中设置设备支持的方向(也可以在项目的plist中设置)

将肖像与屏幕底部的主页按钮垂直放置
上下颠倒垂直放置,并且主页按钮位于屏幕顶部
风景水平向左,主页按钮位于屏幕左侧
横向在水平方向上,主页按钮位于屏幕右侧
我们在StoryBoard中拖动了一个新的ViewController,绑定了其文件的所有者,然后放置了6个UIView,设置了不同的背景颜色


程序运行后ios 重力感应旋转,我们旋转模拟器,发现在垂直和水平屏幕上,界面显示如下


显然,此显示不适用于横向模式. 为了获得合适的显示效果,我们需要在ViewController中编写一些代码.
首先让我们看一下与ViewController中重力感应相关的一些功能
-(BOOL)应该自动旋转
此函数返回YES表示视图控制器支持重力感应,返回NO表示视图控制器不支持重力感应

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
此功能设置在加载视图控制器后首先显示的方向. UIInterfaceOrientation是一个结构. 支持的值如下
UIInterfaceOrientationPortrait
UIInterfaceOrientationPortraitUpsideDown
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
-(NSUInteger)支持的InterfaceOrientations
此函数设置视图控制器支持的方向(需要shouldAutorotate返回YES),支持的值如下

UIInterfaceOrientationMaskPortrait
UIInterfaceOrientationMaskLandscapeLeft
UIInterfaceOrientationMaskLandscapeRight
UIInterfaceOrientationMaskPortraitUpsideDown
UIInterfaceOrientationMaskLandscape
UIInterfaceOrientationMaskAll =(UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown)
UIInterfaceOrientationMaskAllButUpsideDown
-(void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)到InterfaceOrientation持续时间: (NSTimeInterval)持续时间

该功能将在用户界面即将旋转时触发ios 重力感应旋转,并且toInterfaceOrientation指示要达到的方向
-(void)didRotateFromInterfaceOrientation: (UIInterfaceOrientation)fromInterfaceOrientation
此功能在用户界面旋转结束时触发,fromInterfaceOrientation指示旋转之前的方向
-(void)willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation)到InterfaceOrientation持续时间: (NSTimeInterval)持续时间
在旋转用户界面期间触发此功能. 通常,翻转后控件的位置和大小是在此功能中自定义的
因此,在上面的示例中,我们首先将六个UIVIew控件连接到视图控制器,然后在willAnimateRotationToInterfaceOrientation: duration: 中修改了旋转的界面:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) { self.view1.frame = CGRectMake(50, 20, 110, 130); self.view2.frame = CGRectMake(225, 20, 110, 130); self.view3.frame = CGRectMake(400, 20, 110, 130); self.view4.frame = CGRectMake(50, 180, 110, 130); self.view5.frame = CGRectMake(225, 180, 110, 130); self.view6.frame = CGRectMake(400, 180, 110, 130); } }
上面的代码将视图控件旋转到横向时会更改其位置. 因为默认情况下,由于strobyboard将界面布置为垂直状态,所以无需在代码中重新布置垂直状态下视图控件的位置,但是如果我们将控件置于编码模式下,则我们需要在上面的代码中添加else来设置垂直屏幕之后的界面.


转载于:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/sanxing/article-202164-1.html
帮做不断提高产品质量
@老子起个昵称怎么就那么难@郑甜甜的辛普森美美美
谁信啊