2013-09-09 2 views
0

У меня есть существующее приложение для iPad (XCode 4.6, ARC, Storyboards и iOS 6.2). Приложение прекрасно работает в режиме «Портрет», но не так хорошо в ландшафтном режиме, используя «Автоматический макет» (см. Изображения ниже).Использование автоматической компоновки с методами рисования CGContext?

This is showing portrait mode; notice where the names are above the yellow view

Изображение выше показывает режим портрета, который является правильным.

enter image description here

Это ландшафтный режим ... обратите внимание, что не хватает названия и цвет фона.

Это код, который создает верхнюю сетку:

-(void) drawTopGrid { 

// set up notification for redrawing topGrid 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(notificationToRedrawTopGrid:) 
              name:@"redrawTopGrid" object:nil ]; 

// setup for drawing grid 
CGContextRef context = UIGraphicsGetCurrentContext(); 

#define START_VERTICAL_LINE 1 // was 110 
#define VERTICAL_LINE_INCREMENT 110 // was 110 
#define VERTICAL_LINE_LENGTH 52 // (compute based on number of hours) 

// draw first vertical line 
CGContextMoveToPoint(context, START_VERTICAL_LINE, 0); //start 
CGContextAddLineToPoint(context, START_VERTICAL_LINE, VERTICAL_LINE_LENGTH); //draw to this point 
CGContextStrokePath(context); // draw it... 

// draw remainder of vertical lines (based on count of staff positions defined) <--------------- TODO 
for(int i = 2; i < 24; i += 2) { // will hold 6 staff positiions 
    CGContextMoveToPoint(context, (i * VERTICAL_LINE_INCREMENT) - i, 0); //start 
    CGContextAddLineToPoint(context, (i * VERTICAL_LINE_INCREMENT- i), VERTICAL_LINE_LENGTH); //draw to this point 
    CGContextStrokePath(context); // draw it... 
} 

// get the staff names 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *pathForStaffNames = [documentsDirectory stringByAppendingPathComponent:@"staffNames.plist"]; 
NSDictionary *staffDict = [NSDictionary dictionaryWithContentsOfFile:pathForStaffNames]; 
staffPos1 = [staffDict objectForKey:Slot1]; 
staffPos2 = [staffDict objectForKey:Slot2]; 
staffPos3 = [staffDict objectForKey:Slot3]; 
staffPos4 = [staffDict objectForKey:Slot4]; 
staffPos5 = [staffDict objectForKey:Slot5]; 
staffPos6 = [staffDict objectForKey:Slot6]; 

const float hourFontSize = 18; 
UIFont *hourfont=[UIFont systemFontOfSize:hourFontSize]; 

// draw staff names 
[[UIColor redColor] set]; 
[staffPos1 drawAtPoint:CGPointMake(85, 12) withFont:hourfont]; // increment is 220 

[[UIColor blueColor] set]; 
[staffPos2 drawAtPoint:CGPointMake(303, 12) withFont:hourfont]; 

[[UIColor magentaColor] set]; 
[staffPos3 drawAtPoint:CGPointMake(523, 12) withFont:hourfont]; 

[[UIColor redColor] set]; 
[staffPos4 drawAtPoint:CGPointMake(743, 12) withFont:hourfont]; 

[[UIColor blueColor] set]; 
[staffPos5 drawAtPoint:CGPointMake(963, 12) withFont:hourfont]; 

[[UIColor magentaColor] set]; 
[staffPos6 drawAtPoint:CGPointMake(1183, 12) withFont:hourfont]; 

}

Мой вопрос: я должен делать что-то другое, используя методы рисования CG? Левая сетка, верхняя сетка и центральная сетка все рисуются одинаково. Цвет фона находится на UIView ниже рисунка. Единственными ограничениями для верхней сетки являются ширина и высота.

ответ

1

Вот ответ, который я искал:

Core Graphics рисунок ничего не знает о системе вида (в том числе автоматической компоновки). Если контент, который вы рисуете, не появляется, это, скорее всего, потому, что ваша геометрия представления вызывает передачу контекста, в котором не создается геометрия, которую ожидает ваш рисунок (и обычное решение для вашего кода чертежа, чтобы посмотреть на представление границы и положение на основе этого).

Смежные вопросы