Используйте UIDynamics с раскадровкой
Я добавил UIDynamicAnimator в свой UIView, который я создал программно. Теперь я хотел бы создать UIView в раскадровке, потому что я хотел бы использовать autolayout. Кто-нибудь знает, что я должен изменить для использования UIView из раскадровки?
Мой код:
func showSideBar(shouldOpen:Bool){
let barWidth:CGFloat = CGFloat(self.view.bounds.size.width)
animator.removeAllBehaviors()
isSideBarOpen = shouldOpen
let gravityX:CGFloat = (shouldOpen) ? 1.5 : -1.5
let magnitude:CGFloat = (shouldOpen) ? 50 : -50
let boundaryX:CGFloat = (shouldOpen) ? barWidth : -barWidth
let gravityBehavior:UIGravityBehavior = UIGravityBehavior(items: [sideBarContainerView])
gravityBehavior.gravityDirection = CGVectorMake(gravityX, 0)
animator.addBehavior(gravityBehavior)
let collisionBehavior:UICollisionBehavior = UICollisionBehavior(items: [sideBarContainerView])
collisionBehavior.addBoundaryWithIdentifier("sideBarBoundary", fromPoint: CGPointMake(boundaryX, 20), toPoint: CGPointMake(boundaryX, view.frame.size.height))
animator.addBehavior(collisionBehavior)
let pushBehavior:UIPushBehavior = UIPushBehavior(items: [sideBarContainerView], mode: UIPushBehaviorMode.Instantaneous)
pushBehavior.magnitude = magnitude
animator.addBehavior(pushBehavior)
let sideBarBehavior:UIDynamicItemBehavior = UIDynamicItemBehavior(items: [sideBarContainerView])
sideBarBehavior.elasticity = 0.2
animator.addBehavior(sideBarBehavior)
}
1 ответ
Вам не нужно ничего менять в коде, который вы показали; это остается идентичным. animator
продолжает жить там, где живет сейчас.
sideBarContainerView
может потребоваться стать выпуском, чтобы вы могли получить ссылку на это представление, если оно теперь создается в раскадровке, а не в коде, но это трудно понять отсюда, потому что вы не показывали эту часть своего кода, и вы не указали в своем вопросе, что вы подразумеваете под "мой UIView" - я предполагаю, что это относится к sideBarContainerView
,
Наконец, обратите внимание, что UIKit Dynamics и autolayout являются врагами друг друга. Вы не можете анимировать представление, используя UIKit Dynamics, если оно находится под влиянием autolayout, потому что UIKitDynamics пытается изменить фрейм представления, в то время как autolayout пытается позиционировать представление через ограничения.