Анимация высоты UIView при использовании автоматического макета с быстрым
Перед автомастером я анимировал высоту фона в проекте, установив фрейм над animateWithDuration
.
func setUpBackground() {
self.backgroundView.frame = CGRect(x: 0, y: 0, width: 320, height: 10)
self.backgroundView.backgroundColor = UIColorFromRGB(0x2d2d2d).CGColor
}
func AnimateBackgroundHeight() {
UIView.animateWithDuration(0.5, animations: {
self.backgroundView.frame = CGRect(x: 0, y: 0, width: 320, height: 600)
})
}
После преобразования моего проекта в автоматический макет, я заметил, что анимация происходит, но высота фона возвращается к исходному размеру/стилю (настройке построителя интерфейса) после. Я прочитал, что при включении Auto-layout ограничения будут перезаписывать параметры UIView
с помощью CGRect
.
Поэтому мне интересно, как продвигаться к одному и тому же эффекту анимации изменения высоты при включенной автоматической компоновке.
Ответы
Ответ 1
Дайте фону фонового рисунка ограничение по высоте и создайте для него IBOutlet. В коде измените значение константы ограничения.
func AnimateBackgroundHeight() {
UIView.animateWithDuration(0.5, animations: {
self.heightCon.constant = 600 // heightCon is the IBOutlet to the constraint
self.view.layoutIfNeeded()
})
}
Ответ 2
Также для тех из вас, кто находит это сообщение, пытаясь понять, почему переход, изменяющий размер представления, будет блочным или нечистым, вам просто нужно найти представление и вызвать self.view.layoutIfNeeded()
внутри блока UIView.animateWithDuration
. Я ударился головой о стену, пробирая разные вещи с ограничениями и создавая кадры, до тех пор, пока не осознаю, что self.view.layoutIfNeeded()
будет работать, делая переход гладким, пока вы размещаете его в нужном месте.