2012-01-23 5 views
3

У меня есть приложение IOS, которая сводится к следующему:перерисовка текста на увеличенном UIImageView после масштабирования

  • контроллер вида, который реализует все UIScrollViewDelegate метод.
  • Индивидуальный номер UIImageView который является видом, возвращенным viewForZoomingInScrollView в первом контроллере.

В drawRect методе настраиваемой UIImageView я накладывать текст на различных позициях на изображении, текст может быть различных размеров и углов, стесненных в виде прямоугольника, определенного точками на изображении. Таким образом, система координат по отношению к изображению связана с UIImageView.

Иногда текст необходимо визуализировать в областях, которые слишком малы, чтобы текст мог быть доступен для чтения при уровне масштабирования по умолчанию.

Однако, когда я увеличиваю масштаб, это не делает текст более удобным для чтения, поскольку текст был нанесен на оригинал UIImageView с размером шрифта, соответствующим границам, которые он дал.

Что мне нужно - это как-то перерисовать этот текст в правильном месте по-прежнему с пропорционально большим размером шрифта при увеличении. Возможно ли это и как мне это сделать?

ответ

2

Я сам работал над масштабируемым планом этажей и рассматривал его довольно простым способом.

Я поместил свой текст в ярлыки и поместил эти ярлыки поверх ImageView. При масштабировании ярлыков с помощью UIImageView и, следовательно, текста в масштабе.

При увеличении слишком много однако текст становится расплывчатым и размыто, так что вы можете обновить эти текстовые метки в:

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale 

Для меня это было достаточно, я надеюсь, что это может быть так и для вас ,

+0

Я изменил свой метод рисования, чтобы использовать UILabels вместо этого, но это так же расплывчато с ними, можете ли вы просветить меня, что вы сделали в '- (void) scrollViewDidEndZooming: (UIScrollView *) scrollView withView: (UIView *) просмотреть метод atScale: (float) scale, который не размыл их? –

+0

setNeedsDisplay на всех ваших ярлыках должно хватить –

+0

Нет кубиков!Я покорно назвал 'setNeedsDisplay' на каждом из лейблов, и они вообще не меняют внешний вид - есть ли еще какой-то другой шаг, который вы предположили, что я сделал? Мои 'UILabel' добавлены в представление, которое было увеличено, а не' UIScrollView'. Затем я заканчиваю «setNeedsDisplay» на каждом из них после завершения маневра масштабирования. –

2

Вместо того, чтобы исправить это, я бы сказал, что ваш дизайн немного неправильный. Я бы реинжинировал это, чтобы вы отображали все содержимое, которое вы показываете, с максимальным масштабированием, которое вы хотите, а затем разрешаете прокручиванию просматривать/уменьшать готовое содержимое, задавая параметры масштабирования. В противном случае вы сойдете с ума, пытаясь исправить текст. Просто нарисуйте все изображение/документ так сильно, как вы хотите, а затем добавьте содержимое THOSE в вид прокрутки с меньшим зумом, позволяя пользователю увеличивать/уменьшать изображение по мере их появления. Тогда все готово.

2

Вы можете написать текст наложения на UILabels, прикрепленный к представлению UIViewController. Тогда вы должны сделать свой собственный класс от UIScrollView и переопределения

- (void)setContentOffset:(CGPoint)anOffset 

здесь, используя anOffset и self.zoomScale вы можете разместить свои метки в местах, которые вы хотите, с apropriate размер шрифта и все. Таким образом, они будут менять свои позиции каждый раз, когда ваш scrollview перемещается или масштабируется.

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