Изменить вывод 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(ориентация)) нужно объявить параметр / константу, и это не похоже, что я могу сделать это здесь - есть ли что-то подобное, что я могу сделать?

2 ответа

Решение

Вы можете сделать это, используя

if(UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]))

или путем изменения флага (например, BOOL shouldDrawPortrait) в didRotateFromInterfaceOrientation: вашего взгляда контроллера.

Когда устройство изменит ориентацию, в didRotateFromInterfaceOrientationВы должны вызвать метод setNeedDisplay из UIView,

например: [box1 setNeedDisplay];

Другие вопросы по тегам