В настоящее время я разрабатываю расширяющиеся сроки. Когда я увеличиваю масштаб временной шкалы, мне нужно, чтобы нарисованный текст оставался в тех же относительных положениях в UIView, на которых они нарисованы внутри UIScrollView, который обрабатывает масштабирование. (По сути, как булавки на GoogleMaps) Однако я не хочу увеличивать масштаб по вертикали, поэтому я применяю преобразование, переопределив:
- (void)setTransform:(CGAffineTransform)newValue;
{
newValue.d = 1.0;
[super setTransform:newValue];
}
Это отлично работает, удерживая временную шкалу фиксированной по вертикали и позволяя ей расширяться по горизонтали. Однако я рисую свои текстовые метки как таковые в методе, вызываемом во время setNeedsDisplay:
for (int i = 1; i < 11; i++)
{
CGRect newFrame = CGRectMake(i * (512.0/11.0) - (512.0/11.0/2.0), self.frame.size.height - 16.0, 512.0/11.0, 32.0);
NSString *label = [NSString stringWithFormat:@"%d", i+1];
[label drawInRect:newFrame withFont:[UIFont systemFontOfSize:14.0]];
}
Это рисует мой текст в правильной позиции в режиме прокрутки и почти отлично работает. Однако из-за моего преобразования, чтобы сохранить статическое масштабирование по вертикали, текст расширяется по горизонтали, а не по вертикали, и поэтому растягивается ужасно. Кажется, мне не удается перерисовать текст с правильным соотношением сторон. Использование UILabels работает, однако я собираюсь отрисовывать и обрабатывать более 1000 таких меток, поэтому я бы предпочел рисовать статические изображения в drawRect или чем-то подобном.
Я попытался изменить CGRect, в котором я рисую текст (стоило попробовать), и применение CGAffineTransformIdentity невозможно, потому что я уже трансформирую представление, чтобы оно не увеличивалось по вертикали. Я также пробовал рисовать текст в различных представлениях, но безрезультатно, и, опять же, я бы предпочел не заполнять непристойное количество объектов, если я могу этого избежать.
Спасибо за любую помощь!