Я использовал pinchGesture
для увеличения и уменьшения масштаба textView
, используя приведенный ниже код.
добавил pinchGesture
к textView
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(self.handlePinch))
pinchGesture.delegate = self
view.addGestureRecognizer(pinchGesture)
делегировать
@IBAction func handlePinch(recognizer:UIPinchGestureRecognizer) {
if let view = recognizer.view as? UITextView {
view.transform = view.transform.scaledBy(x: recognizer.scale, y: recognizer.scale)
recognizer.scale = 1
}
}
Результат
Вот возможное решение, которое я применил, но все еще не смог найти идеальное решение.
@IBAction func handlePinch(recognizer:UIPinchGestureRecognizer) {
if let textView = recognizer.view as? UITextView {
let font = textView.font!
var pointSize = font.pointSize
let fontName = font.fontName
pointSize = ((recognizer.velocity > 0) ? 1 : -1) * 1 + pointSize;
if (pointSize < 13) {
pointSize = 13
}
if (pointSize > 100) {
pointSize = 100
}
textView.font = UIFont(name: fontName, size: pointSize)
}
}
Результат
Используя вышеуказанное решение, я успешно могу увеличить размер шрифта, но рамка textView не обновляется, поэтому текст обрезается, потому что рамка textView меньше.
Ожидаемый результат
Шрифт увеличится, а кадр будет обновлен, поэтому он будет выглядеть как простое увеличение и уменьшение масштаба, но без размытия.
Ищем наилучшее возможное решение для увеличения размера шрифта с помощью фрейма, как это делают instagram и snapchat.
Спасибо.
UIFont
и с тем, как реализованы векторы пользовательского шрифта. (Я знаю достаточно о создании пользовательского шрифта, чтобы быть опасным.) Две мысли: (1) Знаете ли вы, что ваши источники для решения на самом деле используют консервированныйUIFont
? Возможно ли, что они создали свой собственный шрифт - у них есть штат сотрудников и ресурсы для этого. (2) Если это не так, возможно ли, что они обходятUIFont
, используяUIImage
и анимируя? Удачи в выяснении этого. - person dfd   schedule 12.01.2019UIFont
до такой степени, что вы знаете, что это можно сделать? Это то, что я вижу, это ваше базовое предположение. - person dfd   schedule 12.01.2019UIFont
— у них наверняка есть ресурсы для создания растеризованного алфавита, который может это сделать — или, может быть, они нашли более простой способ — использоватьUIImage
для расширения/сжатия текстового поля без размытия, а затем показывать готовое текстовое поле. Вы задаете отличный вопрос — я проголосовал за него — и я просто думаю нестандартно, потому что пока ни у кого нет ответа. - person dfd   schedule 12.01.2019