带有动画的文本字段四边形边框

时间:2018-12-14 08:21:22

标签: swift uitextfield cabasicanimation

我想在用户单击内部时突出显示文本字段的四边边框,并在用户编辑结束时返回。为此,我在文本字段的editDidBegin函数中包含以下代码段。

func pulseBorderColor() {
    let pulseAnimation = CABasicAnimation(keyPath: "borderColor")
    pulseAnimation.duration = 0.35
    pulseAnimation.fromValue = UIColor.green.cgColor
    pulseAnimation.toValue = UIColor(red: 252/255, green: 180/255, blue: 29/255, alpha: 1.0).cgColor
    pulseAnimation.fillMode = kCAFillModeForwards
    pulseAnimation.isRemovedOnCompletion = false
    pulseAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    nationalIdentityTextField.layer.sublayers![0].add(pulseAnimation,forKey: nil)
}

要恢复我的文本字段颜色,我在文本字段editingDidEnd函数内部有以下代码

func reversePulseBorderColor() {
    let pulseAnimation = CABasicAnimation(keyPath: "borderColor")
    pulseAnimation.duration = 0.35
    pulseAnimation.fromValue = UIColor(red: 252/255, green: 180/255, blue: 29/255, alpha: 1.0).cgColor
    pulseAnimation.toValue = UIColor.green.cgColor
    pulseAnimation.fillMode = kCAFillModeForwards
    pulseAnimation.isRemovedOnCompletion = false
    pulseAnimation.timingFunction = CAMediaTimingFunction(name:  kCAMediaTimingFunctionEaseInEaseOut)
    nationalIdentityTextField.layer.sublayers![0].add(pulseAnimation,forKey: nil)
}

但是,它无法实现我想要的。可能是什么原因,我该如何解决?

1 个答案:

答案 0 :(得分:0)

我认为您应该将result = defaultdict(list) for d in list_of_dicts: for k, v in d.items(): result[k].append(v) 设置为相关文本字段的层,而不是keyPath 并且还需要将CABasicAnimation设置为至少1才能使颜色可见。

这是我尝试修改上面的代码并使之正常工作的地方

borderWidth

要设置borderWidth,您可以通过在这样的代码中设置它来实现

 func pulseBorderColor() {
        let pulseAnimation = CABasicAnimation(keyPath: nil)
        pulseAnimation.duration = 0.35
        pulseAnimation.fromValue = UIColor.green.cgColor
        pulseAnimation.toValue = UIColor(red: 252/255, green: 180/255, blue: 29/255, alpha: 1.0).cgColor
        pulseAnimation.fillMode = CAMediaTimingFillMode.forwards
        pulseAnimation.isRemovedOnCompletion = false
        pulseAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
        txtInput.layer.add(pulseAnimation, forKey: "borderColor")
    }

 func reversePulseBorderColor() {
        let pulseAnimation = CABasicAnimation(keyPath: nil)
        pulseAnimation.duration = 0.35
        pulseAnimation.fromValue = UIColor(red: 252/255, green: 180/255, blue: 29/255, alpha: 1.0).cgColor
        pulseAnimation.toValue = UIColor.green.cgColor
        pulseAnimation.fillMode = CAMediaTimingFillMode.forwards
        pulseAnimation.isRemovedOnCompletion = false
        pulseAnimation.timingFunction = CAMediaTimingFunction(name:  CAMediaTimingFunctionName.easeInEaseOut)
        txtInput.layer.add(pulseAnimation, forKey: "borderColor")
    }

或身份检查器中的“用户定义的运行时属性”。

希望这会有所帮助。