#swift
#swift
Вопрос:
Я создал эту анимацию ширины, которая создает нижнюю границу для моего текстового поля, и я хочу анимировать ее так, чтобы, когда пользователь нажимал на текстовое поле, слой переходил слева направо, а затем появлялся. проблема в том, что анимация начинается с центра, а затем ширина увеличивается с каждой стороны, в то время как я хочу, чтобы она начиналась слева направо… Чего мне не хватает?
override func didAddSubview(_ subview: UIView) {
let shape = CALayer()
shape.frame = CGRect(x: 0, y: self.height, width: self.width, height: 1)
shape.frame.origin.x = 0
shape.backgroundColor = UIColor.red.cgColor
self.layer.addSublayer(shape)
let boundsAnim:CABasicAnimation = CABasicAnimation(keyPath: "bounds.size.width")
boundsAnim.fromValue = 0
boundsAnim.toValue = self.width
boundsAnim.duration = 2
shape.add(boundsAnim, forKey: "bounds.size.width")
}
Ответ №1:
Установите точку привязки с левой стороны
shape.anchorPoint = CGPoint(x: 0, y: 0.5)
Комментарии:
1. я сделал это, но теперь он начинается с начала, но не может видеть всю ширину, пожалуйста, проверьте скриншот, который я обновил в сообщении
2. Хм … попробуйте также установить позицию:
shape.position = CGPoint(x: 0, y: 0)
3. да, я уже понял это, спасибо … так что это в основном переопределяет CGRect, который я создал ранее? я
4. В значительной степени — кадр вычисляется из
position
,anchorPoint
, иbounds
. Когда вы изменили точку привязки, позиция изменилась, поэтому вам нужно изменить ее обратно.