Изменить вывод 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];