我正在开发一款针对iOS 6.1及更高版本,iPhone和iPad的应用。它主要是openGL并使用GLKit。我有一个简单的颜色选择器来改变颜色。它只是一个有颜色的正方形,还有三个滑块,红色,绿色和蓝色。我正在重载viewWillLayoutSubviews来执行此操作:在纵向模式下,正方形位于顶部,下方有滑块。在横向模式下,滑块向右移动。除了根据模拟器我不断获得意外行为(我只有iPhone 5 iOS 8,它表现良好)。
所以我写了一些调试代码来看看发生了什么:
- (void)viewWillAppear:(BOOL)animated {
currentOrientation = (UIInterfaceOrientation)[[UIDevice currentDevice]orientation];
if (currentOrientation == UIInterfaceOrientationUnknown) {
currentOrientation = [UIApplication sharedApplication].statusBarOrientation;
}
NSLog(@"Device: %@ OS: %@ Orientation: %@", ([SystemInfo deviceType] == iPad)?@"iPad":@"iPhone",
([SystemInfo operatingSystemIs8OrGreater])?@"8":@"7",
(UIInterfaceOrientationIsPortrait(currentOrientation)?@"portrait":@"landscape"));
NSLog(@"Frame dimensions: width=%d height=%d", (int)self.view.frame.size.width, (int)self.view.frame.size.height);
NSLog(@"Bounds dimensions: width=%d height=%d", (int)self.view.bounds.size.width, (int)self.view.bounds.size.height);
SystemInfo只是一个返回系统信息的小类。我在iPhone 5和iPad 2模拟器上运行它,iOS 7.1和8.1,纵向和横向。这就是我得到的:
iPhone 5(7.1)
设备:iPhone OS:7方向:纵向
框架尺寸:宽度= 320高度= 568
边界尺寸:宽度= 320高度= 568
设备:iPhone OS:7方向:横向
框架尺寸:宽度= 568高度= 320
边界尺寸:宽度= 568高度= 320
iPhone 5(8.1)
设备:iPhone OS:8方向:纵向
框架尺寸:宽度= 320高度= 568
边界尺寸:宽度= 320高度= 568
设备:iPhone OS:8方向:横向
框架尺寸:宽度= 320高度= 568
边界尺寸:宽度= 320高度= 568
iPad 2(7.1)
设备:iPad OS:7方向:纵向
框架尺寸:宽度= 768高度= 1024
边界尺寸:宽度= 768高度= 1024
设备:iPad OS:7方向:横向
框架尺寸:宽度= 1024高度= 768
边界尺寸:宽度= 1024高度= 768
iPad 2(8.1)
设备:iPad OS:8方向:纵向
框架尺寸:宽度= 320高度= 568
边界尺寸:宽度= 320高度= 568
设备:iPad OS:8方向:横向
框架尺寸:宽度= 320高度= 568
边界尺寸:宽度= 320高度= 568
似乎iOS 7通过将框架尺寸翻转到它们应该是什么来帮助我,除了我已经翻过它们,因为iOS 8没有。这无关紧要,我可以适应。但我有4个问题:
1)iOS 6有什么作用?我定位它并且我不再拥有模拟器了。
2)iPad 2(8.1)模拟器的用途是什么?它的尺寸与iPhone 5(8.1)相同。结果,我的颜色选择器大约1/4大小。我应该将尺寸设置为1024x768 landscape 768x1024 portrait?
3)iOS 9会做什么? (或者也许他们会像微软一样跳过9并直接进入iOS X - 哇,如果我现在感到困惑,那真的会有所作为。)
4)下一代iPad的尺寸是多少?我能指望1024和768吗?我突然想到在iPad Retina模拟器上运行代码,结果与iPad 2完全相同。
提前致谢。我知道这与其他问题有点相似,但它们对我来说似乎都很模糊。
答案 0 :(得分:0)
我希望我一周前知道这件事!我仍然没有弄清楚为什么iOS 8上的iPad会将320x568作为尺寸发送到我的颜色选择器(它从笔尖加载而我有预感问题就在那里)。