处理 ios 设备方向
Posted
技术标签:
【中文标题】处理 ios 设备方向【英文标题】:handling ios device orientation 【发布时间】:2012-06-17 23:28:20 【问题描述】:我的 uiviews 有问题,具体取决于设备方向...
我遇到的主要问题是
UIDeviceOrientationFaceUp
UIDeviceOrientationFaceDown
我的视图弄乱了我只想支持纵向和横向(左右)所以如果设备改变方向我的视图会正确地改变自己..
这是我目前实施的。基本上它是一个从屏幕底部向上滚动的 UIView,在这个视图中有几个按钮,用户可以选择加载不同的视图。
#pragma jumpBarButtons
- (void)jumpBarButtonPosition
//orientation stuff
if (jumpBar.isViewLoaded)
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
switch (orientation)
case UIDeviceOrientationPortrait:
NSLog(@"Portrait");
// Row one
jumpButton1.frame = CGRectMake(18.45, 23.0, 57.0, 57.0);
jumpButton2.frame = CGRectMake(93.9, 23.0, 57.0, 57.0);
jumpButton3.frame = CGRectMake(169.35, 23.0, 57.0, 57.0);
jumpButton4.frame = CGRectMake(244.8, 23.0, 57.0, 57.0);
// Row tow
jumpButton5.frame = CGRectMake(18.45, 95.0, 57.0, 57.0);
jumpButton6.frame = CGRectMake(93.9, 95.0, 57.0, 57.0);
jumpButton7.frame = CGRectMake(169.35, 95.0, 57.0, 57.0);
jumpButton8.frame = CGRectMake(244.8, 95.0, 57.0, 57.0);
// Row three
jumpButton9.frame = CGRectMake(18.45, 167.0, 57.0, 57.0);
jumpButton10.frame = CGRectMake(93.9, 167.0, 57.0, 57.0);
jumpButton11.frame = CGRectMake(169.35, 167.0, 57.0, 57.0);
jumpButton12.frame = CGRectMake(244.8, 167.0, 57.0, 57.0);
// Row four
jumpButton13.frame = CGRectMake(18.45, 239.0, 57.0, 57.0);
jumpButton14.frame = CGRectMake(93.9, 239.0, 57.0, 57.0);
jumpButton15.frame = CGRectMake(169.35, 239.0, 57.0, 57.0);
jumpButton16.frame = CGRectMake(244.8, 239.0, 57.0, 57.0);
break;
case UIDeviceOrientationLandscapeLeft:
case UIDeviceOrientationLandscapeRight:
viewSpaceHeight = 207;
viewSpaceWidth = 480;
// Row one
jumpButton1.frame = CGRectMake(19.7, 9.0, 57.0, 57.0);
jumpButton2.frame = CGRectMake(96.42, 9.0, 57.0, 57.0);
jumpButton3.frame = CGRectMake(173.13, 9.0, 57.0, 57.0);
jumpButton4.frame = CGRectMake(249.84, 9.0, 57.0, 57.0);
jumpButton5.frame = CGRectMake(326.55, 9.0, 57.0, 57.0);
jumpButton6.frame = CGRectMake(403.26, 9.0, 57.0, 57.0);
// Row tow
jumpButton7.frame = CGRectMake(19.7, 75.0, 57.0, 57.0);
jumpButton8.frame = CGRectMake(96.42, 75.0, 57.0, 57.0);
jumpButton9.frame = CGRectMake(173.13, 75.0, 57.0, 57.0);
jumpButton10.frame = CGRectMake(249.84, 75.0, 57.0, 57.0);
jumpButton11.frame = CGRectMake(326.55, 75.0, 57.0, 57.0);
jumpButton12.frame = CGRectMake(403.26, 75.0, 57.0, 57.0);
// Row three
jumpButton13.frame = CGRectMake(19.7, 141.0, 57.0, 57.0);
jumpButton14.frame = CGRectMake(96.42, 141.0, 57.0, 57.0);
jumpButton15.frame = CGRectMake(173.13, 141.0, 57.0, 57.0);
jumpButton16.frame = CGRectMake(249.84, 141.0, 57.0, 57.0);
break;
//..
如果纵向有 16 个 4,4,4,4 图标,那就差不多了,如果横向则图标是 6,6,4。如果设备翻转为面朝上或面朝下会发生什么,所有这些按钮视图都会消失。我能做些什么来阻止这种情况,任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:请改用UIInterfaceDirection
。它是UIApplication
类的一部分,它只包含以下值
typedef enum
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
UIInterfaceOrientation;
您可以像这样轻松检查当前方向:
[[UIApplication sharedApplication] statusBarOrientation]
【讨论】:
啊完美!非常感谢你..我虽然我快疯了几秒钟! :P以上是关于处理 ios 设备方向的主要内容,如果未能解决你的问题,请参考以下文章