ios - 快速平移手势显示奇怪的视觉行为
问题描述
我在 iOS 项目中添加了一个平移手势识别器。其目的是允许用户通过左右拖动来更改 UITextField 中的 Float 值。这很好用,它唯一要做的就是更新它所附加的 UITextField 的内容。没有操纵被拖动的物体......
但如果我连续多次使用它,它就会开始产生一种奇怪的视觉伪影,如图所示。
字段本身在该区域上方重新绘制,并被菱形形状掩盖,可能源自其旁边的开关。当我替换标签时,我没有遇到这个问题,这可能是更好的方法,因为我实际上不希望用户直接将文本添加到字段中;这些值受到限制,它更像是一个 PITA。
另一方面,让基本插图与您在 textField 中看到的标签相匹配似乎也是一个完整的 PITA,并且该项目现在可以与 UITextFields 一起使用,所以我更愿意弄清楚如何避免这种情况,而仍在使用它们。
知道为什么会发生这种情况吗?对象是在情节提要中创建的,但gestureRecognizer 是通过编程方式添加的。
这是代码
func addPanGesture(view: UITextField) {
let pan = UIPanGestureRecognizer(target: self, action: #selector(FileSelectorController.handlePan(sender:)))
view.addGestureRecognizer(pan)
}
@objc func handlePan(sender: UIPanGestureRecognizer) {
let field = sender.view as! UITextField
if field.text == "" {
return
}
var upperLimit : Float?
var lowerLimit: Float = 0.0
if field == strokeWeightValue {
upperLimit = 40.0
}
let defaultVal : Float = 1.0
let startingVal = Float(field.text!) ?? defaultVal
let translation = sender.translation(in: view)
var newVal : Float = startingVal
switch sender.state {
case .began, .changed:
newVal = startingVal + Float(translation.x)/50
var limitedVal = max(lowerLimit,newVal)
if upperLimit != nil { limitedVal = min(upperLimit!, limitedVal)}
field.text = formatDecimal(value: limitedVal)
default :
break
}
}
解决方案
推荐阅读
- asp.net - 如何使用 tr onlick url 操作重定向
- sql - SQL 适用于 for 循环,但不适用于动态 sql,您能帮我找出原因吗?
- javascript - 如何从 Javascript 中的另一个文件访问变量?
- android - Kotlin - 嵌套 AlertDialog 循环崩溃
- r - 将列吐成多列
- python - VAE 中的尺寸不匹配
- postgresql - Go 应用程序和 Postgres 之间的 Docker-compose 通信问题
- linux - 安装 tensorflow 时无法修复 glibc 错误
- r - 找不到签名“data.frame”的函数“select”的继承方法
- python-3.x - 如何显示 plt.plot 的 xtick 像 '1990s ,2000s, 2010s' 等