Swift 3 анимация UIView
С момента обновления моего проекта до быстрого 3 мои анимации ограничения автоопределения не работают; чтобы быть более конкретными, они привязаны к новой позиции, а не оживляют.
UIView.animate(withDuration: 0.1,
delay: 0.1,
options: UIViewAnimationOptions.curveEaseIn,
animations: { () -> Void in
constraint.constant = ButtonAnimationValues.YPosition.DefaultOut()
self.layoutIfNeeded()
}, completion: { (finished) -> Void in
// ....
})
Я знаю, что они добавили класс UIViewPropertyAnimator
, но я еще не попробовал его.
Ответы
Ответ 1
У меня тоже возникла проблема с обновлением самого нового обновления до версии 3.
Чтобы быть точным, всякий раз, когда вы хотите анимировать представление, вы фактически вызываете layoutIfNeeded в представлении этого представления.
Попробуйте это вместо:
UIView.animate(withDuration: 0.1,
delay: 0.1,
options: UIViewAnimationOptions.curveEaseIn,
animations: { () -> Void in
constraint.constant = ButtonAnimationValues.YPosition.DefaultOut()
self.superview?.layoutIfNeeded()
}, completion: { (finished) -> Void in
// ....
})
Похоже, в прошлом они были снисходительны к тому, чтобы иметь возможность просто передать представление, которое вы хотите оживить. Но его в документации, что вы действительно должны вызвать layoutIfNeeded в супервизии.
Ответ 2
Обновление до версии 3.0
Просмотр анимации справа налево, например анимация анимации Apple по умолчанию
//intially set x = SCREEN_WIDTH
view.frame = CGRect(x: ScreenSize.SCREEN_WIDTH, y: ScreenSize.SCREEN_HEIGHT - heightTabBar , width: ScreenSize.SCREEN_WIDTH, height: heightTabBar)
UIView.animate(withDuration: 0.50, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0, options: [], animations: {
//Set x position what ever you want
view.frame = CGRect(x: 0, y: ScreenSize.SCREEN_HEIGHT - heightTabBar , width: ScreenSize.SCREEN_WIDTH, height: heightTabBar)
}, completion: nil)
Ответ 3
Сначала установите новое значение для вашего ограничения, а затем вызовите анимацию.
self.YOUR_CONSTRAINT.constant = NEW_VALUE
UIView.animate(withDuration: 1.0) {
self.view.layoutIfNeeded()
}
Ответ 4
Swift 3.1, Xcode 8.3.2
Этот код хорошо работает для меня. Любые изменения в вашем представлении оживут в замедленном темпе.
UIView.animate(withDuration: 3.0, animations: { // 3.0 are the seconds
// Write your code here for e.g. Increasing any Subviews height.
self.view.layoutIfNeeded()
})
Ответ 5
Swift 4, Xcode 10
Анимация справа налево для поиска
//изначально установлен x = Your_View_Width
viewOfSearch.frame = CGRect(x: viewOfSearch.frame.size.width, y: 0 , width: viewOfSearch.frame.size.width, height: 50)
UIView.animate(withDuration: 0.50, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0, options: [], animations: {
//Set x position what ever you want
self.viewOfSearch.frame = CGRect(x: 0, y: 0 , width: self.viewOfSearch.frame.size.width, height: 50)
}, completion: nil)
Ответ 6
func setView(view: UIView) {
UIView.transition(with: view, duration: 1.0, options: .transitionFlipFromTop, animations: {
})
}