根据设备方向更改drawRect输出

时间:2013-10-07 16:09:35

标签: ios uiview orientation drawrect

我想使用drawRect绘制6个框,这些框将用作我设置的6个标签输出的背景 - 当设备的方向改变时我需要改变框的绘制位置...我在想做一个if-else语句,如下所示:

- (void)drawRect:(CGRect)rect
{
// Drawing code
if (UIInterfaceOrientationIsPortrait(orientation)) {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 0.611, 0.505, 0.321, 1.0); // Goldie brown colour
    CGContextFillRect(context, CGRectMake(70, 277, 35, 50)); // Years
    CGContextFillRect(context, CGRectMake(145, 277, 35, 50)); // Months
    CGContextFillRect(context, CGRectMake(220, 277, 35, 50)); // Days
    CGContextFillRect(context, CGRectMake(70, 393, 35, 50)); // Hours
    CGContextFillRect(context, CGRectMake(145, 393, 35, 50)); // Minutes
    CGContextFillRect(context, CGRectMake(220, 393, 35, 50)); // Seconds
} else {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 0.611, 0.505, 0.321, 1.0); // Goldie brown colour
    CGContextFillRect(context, CGRectMake(87, 221, 35, 50)); // Years
    CGContextFillRect(context, CGRectMake(162, 221, 35, 50)); // Months
    CGContextFillRect(context, CGRectMake(234, 221, 35, 50)); // Days
    CGContextFillRect(context, CGRectMake(308, 221, 35, 50)); // Hours
    CGContextFillRect(context, CGRectMake(385, 221, 35, 50)); // Minutes
    CGContextFillRect(context, CGRectMake(466, 221, 35, 50)); // Seconds
 }

但这不起作用,因为(UIInterfaceOrientationIsPortrait(orientation))需要参数/常量声明&它看起来不像我在这里可以做到的 - 有什么类似我可以做的吗?

2 个答案:

答案 0 :(得分:1)

您可以使用

执行此操作
if(UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]))

或更改视图控制器的BOOL shouldDrawPortrait中的标记(例如didRotateFromInterfaceOrientation:)。

答案 1 :(得分:0)

设备何时更改方向,在didRotateFromInterfaceOrientation,您必须拨打setNeedDisplay的方法UIView

ex:[box1 setNeedDisplay];