ios - 当 textView isScrollEnabled = false 时使用 pinchGesture 调整字体和框架的大小
问题描述
我曾经使用下面的代码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这样的框架的字体大小。
谢谢。
解决方案
这是使用 UITextView 和 isScrollEnabled = false 调整字体大小以及捏放大/缩小框架的代码
@objc func pinchRecoginze(_ pinchGesture: UIPinchGestureRecognizer) {
guard recognizer.view != nil, let view = recognizer.view else {return}
if view is UITextView {
let textView = view as! UITextView
if recognizer.state == .began {
let font = textView.font
let pointSize = font!.pointSize
recognizer.scale = pointSize * 0.1
}
if 1 <= recognizer.scale && recognizer.scale <= 10 {
textView.font = UIFont(name: textView.font!.fontName, size: recognizer.scale * 10)
let textViewSiSize = textView.intrinsicContentSize
textView.bounds.size = textViewSiSize
}
}
}
更新了与 UITextView 兼容的答案
推荐阅读
- java - 如何使用 ASM java 库获取 Jar 中存在的类的内部类中的所有方法?
- javascript - vuematerial - 使用代码触发 md-tabs
- sql-server - 如何通过 PowerShell 将具有数据写入和数据读取权限的 AAD 组添加到 Azure DB
- javascript - 正则表达式问题模式不起作用
- python - Python拆分单词但返回字母
- c++ - 导出(安装)的 cmake 目标是否可分发?
- react-native - React Native 显示 ListView
- javascript - 通过单击按钮显示 HTML 标记,一次一个
- android - 介绍屏幕打不开
- angular - 在 XHR 请求数据被解析器 Angular 6 完全蒙蔽后加载视图