Текстовое поле четырехсторонней границы с анимацией - PullRequest
0 голосов
/ 14 декабря 2018

Я хотел бы выделить четырехстороннюю границу текстового поля, когда пользователь щелкнул внутри, и вернуться назад, когда пользователь завершит редактирование.Для этого у меня есть следующий фрагмент кода внутри функции 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)
}

И чтобы вернуть обратно цвет моего текстового поля, у меня есть следующий код внутри текстового поля Функция editDidEnd

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 голосов
/ 14 декабря 2018

Я думаю, вам следует установить keyPath для слоя текстового поля, а не для CABasicAnimation, а также вам нужно установить borderWidth как минимум на 1, чтобы цвет был видимым.

И вот что я пытался изменить код выше, и он работал

 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")
    }

, чтобы установить borderWidth, вы можете сделать это, установив его в коде, подобном этому

txtInput.layer.borderWidth = 1

илив пользовательских атрибутах времени выполнения в инспекторе удостоверений.

Надеюсь, это поможет.

...