Масштабируйте шрифт UILabel & Re-render в корректном размере

У меня есть мультилиния UILabel то, что я хочу позволить масштабировать на.

Я встроил его с a UIScrollView и минуты набора масштабируют к.25 и макс. масштабирование к 4. Это работает хорошо, однако мой UILabelшрифт выглядит довольно грубым на любой уровень масштабирования кроме 1.

Я могу обработать этот метод:

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

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

Там какой-либо путь состоит в том, чтобы заставить текст маркировки повторно представить тот, который я сделан, масштабируя?

Важно что пользователи текущее прокрученное положение в тексте не быть потерянным.

(Для получения ощущения того, для чего я иду заметьте, как в Мобильном Safari, когда Вы масштабируете текст, масштабируется/антиискажается в течение доли секунды тогда, это разрешает для рендеринга хорошо в текущем масштабе масштабирования),

14
задан Ben Scheirman 2 January 2010 в 02:58
поделиться

1 ответ

Встроенное в UIScrollView масштабирование применяет только преобразование к просмотру содержимого, что приводит к размытости при масштабе выше 1.0. Для по-настоящему резкого рендеринга вам нужно будет справляться с масштабированием самостоятельно. Я описываю часть процесса в этом ответе .

Вам нужно будет вручную отслеживать масштабный коэффициент просмотра содержимого, затем в -scrollViewDidEndZooming:withView:atScale: методом делегирования вы примените этот масштаб. Для вашей метки UILabel это будет означать изменение размера шрифта для отражения новой шкалы.

Чтобы сохранить правильное положение прокрутки, вам нужно взять ContentOffset из UIScrollView в рамках вышеописанного метода делегирования и вычислить, какой позиции соответствует новая метка UILabel. Затем вы устанавливаете contentSize вида прокрутки в соответствие с новым размером UILabel и используете -setContentOffset:animated: для установки смещения вновь рассчитанного содержимого (с анимированным множеством NO).

Это немного сложно, но я делаю это при масштабировании текста в одном из моих приложений, что можно увидеть в видео демонстрации этого приложения (примерно на отметке 1/3).

.
16
ответ дан 1 December 2019 в 06:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: