首页 > 解决方案 > 快速平移手势显示奇怪的视觉行为

问题描述

我在 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
        }
    }

标签: iosswiftuigesturerecognizer

解决方案


推荐阅读