Вот базовая настройка, которая изолирует проблему:
private func setupConstraints() {
self.slider.translatesAutoresizingMaskIntoConstraints = false
self.redSquare.translatesAutoresizingMaskIntoConstraints = false
self.slider.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
self.slider.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true
self.widthConstraint = self.redSquare.widthAnchor.constraint(equalToConstant: 50)
self.widthConstraint?.isActive = true
self.redSquare.heightAnchor.constraint(equalToConstant: 50).isActive = true
self.redSquare.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
self.xAnchorConstraint = self.redSquare.centerXAnchor.constraint(equalTo: self.view.centerXAnchor, constant: -100)
self.xAnchorConstraint?.isActive = true
}
private func setupAnimation() {
self.animator = UIViewPropertyAnimator(duration: 1, curve: .linear) { [unowned self] in
self.widthConstraint?.constant = 100
self.xAnchorConstraint?.constant = 100
self.view.layoutIfNeeded()
}
}
@objc
private func sliderChanged(_ sender: UISlider) {
self.animator?.fractionComplete = CGFloat(sender.value)
}
Ползунок устанавливает аниматор FractionComplete, который анимирует две константы ограничения. Я ожидаю, что смогу вычистить размер и положение квадрата. Первоначально это работает нормально.
Проблема
После вращения устройства положение квадрата становится фиксированным. Ползунок по-прежнему анимирует ширину квадрата, но больше не его позиция .
Я смоделировал этот пример на нескольких устройствах. Проблема возникает только на iPad . Я могу поворачивать все, что хочу, на iPhone, и анимация работает как положено.