0

我很确定我现在正在以完全错误的方式解决这个问题 - 但在我放弃并重新开始之前,我想我会问......我基本上需要能够检测到正在使用该应用程序的设备(iPhone 4 或 iPhone 5)和设备所在的方向,然后根据这些调整我的视图控制器的输出 - 这就是我所拥有的:

检测设备(好吧,它不检测设备,只是它是一个更大的屏幕,但对我来说没关系!):

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - (    double )568 ) < DBL_EPSILON )

使用宏检测设备,以及检测方向然后调整视图的代码:

- (void)doLayoutForOrientation:(UIInterfaceOrientation)orientation {
if (UIInterfaceOrientationIsPortrait(orientation)) {
    _Logo.frame = CGRectMake(97, 50, 127, 150);
    _timeLabel.frame = CGRectMake(17, 248, 286, 21);
    _years.frame = CGRectMake(70, 277, 35, 50);
    _yearsLabel.frame = CGRectMake(64, 335, 42, 21);
    _months.frame = CGRectMake(145, 277, 35, 50);
    _monthsLabel.frame = CGRectMake(131, 335, 58, 21);
    _days.frame = CGRectMake(220, 277, 35, 50);
    _daysLabel.frame = CGRectMake(216, 335, 39, 21);
    _hours.frame = CGRectMake(70, 393, 35, 50);
    _hoursLabel.frame = CGRectMake(62, 451, 46, 21);
    _minutes.frame = CGRectMake(145, 393, 35, 50);
    _minutesLabel.frame = CGRectMake(132, 451, 61, 21);
    _seconds.frame = CGRectMake(220, 393, 35, 50);
    _secondsLabel.frame = CGRectMake(203, 451, 68, 21);
} if (UIInterfaceOrientationIsLandscape(orientation) && IS_IPHONE_5) {
    _Logo.frame = CGRectMake(221, 20, 127, 150);
    _timeLabel.frame = CGRectMake(141, 178, 286, 21);
    _years.frame = CGRectMake(87, 221, 35, 50);
    _yearsLabel.frame = CGRectMake(83, 279, 42, 21);
    _months.frame = CGRectMake(162, 221, 35, 50);
    _monthsLabel.frame = CGRectMake(150, 279, 58, 21);
    _days.frame = CGRectMake(234, 221, 35, 50);
    _daysLabel.frame = CGRectMake(232, 279, 39, 21);
    _hours.frame = CGRectMake(308, 221, 35, 50);
    _hoursLabel.frame = CGRectMake(302, 279, 46, 21);
    _minutes.frame = CGRectMake(385, 221, 35, 50);
    _minutesLabel.frame = CGRectMake(372, 279, 61, 21);
    _seconds.frame = CGRectMake(466, 221, 35, 50);
    _secondsLabel.frame = CGRectMake(449, 279, 68, 21);
} else {
    _Logo.frame = CGRectMake(177, 20, 127, 150);
    _timeLabel.frame = CGRectMake(97, 178, 286, 21);
    _years.frame = CGRectMake(27, 221, 35, 50);
    _yearsLabel.frame = CGRectMake(23, 279, 42, 21);
    _months.frame = CGRectMake(102, 221, 35, 50);
    _monthsLabel.frame = CGRectMake(90, 279, 58, 21);
    _days.frame = CGRectMake(174, 221, 35, 50);
    _daysLabel.frame = CGRectMake(172, 279, 39, 21);
    _hours.frame = CGRectMake(248, 221, 35, 50);
    _hoursLabel.frame = CGRectMake(242, 279, 46, 21);
    _minutes.frame = CGRectMake(325, 221, 35, 50);
    _minutesLabel.frame = CGRectMake(312, 279, 61, 21);
    _seconds.frame = CGRectMake(406, 221, 35, 50);
    _secondsLabel.frame = CGRectMake(389, 279, 68, 21);
}
}

如果我注释掉中间位,则应用程序在 iPhone 5 模拟器上运行良好,但是当我使用 iPhone 4 模拟器并旋转设备时,标签会从屏幕上消失 - 这是我需要检测设备的原因(它在两个设备上的纵向模式,因为底部的标签集不会进入屏幕底部)。

如果我按原样运行它 - 即使设备(任何设备)处于纵向模式/视图中,标签和徽标也会以横向视图显示。

我猜问题是我的设置/计划出现了某种形式的“失败”或逻辑错误,但此时我想不出另一种方式来对它进行文字/编程。

谢谢

4

1 回答 1

0

我认为您希望 else 块中的代码仅在横向模式下为 3.5 英寸设备运行,对吗?在这种情况下,您需要在第二个 if 之前添加一个 else,否则 else 语句之后的第三个代码块将始终运行,如果我理解正确,它将创建一个横向布局,无论您传入的方向如何。

于 2013-10-09T22:26:10.263 回答