我在我以编程方式创建的UIView上添加了一个UIDynamicAnimator。现在我想在Storyboard中创建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)
}
答案 0 :(得分:1)
您不必更改有关您所显示代码的任何信息;它仍然相同。 animator
继续生活在现在的任何地方。
sideBarContainerView
可能需要成为一个出口,以便您可以获得对该视图的引用,如果它现在是在故事板而不是代码中创建的,但是从这里很难知道,因为你没有显示你的部分代码而且你没有在你的问题中指明你的意思是什么?我的UIView" - 我假设这指的是sideBarContainerView
。
最后请注意,UIKit Dynamics和自动布局是彼此的敌人。如果受到自动布局的影响,则无法使用UIKit Dynamics为视图设置动画,因为UIKitDynamics尝试更改视图的框架,而autolayout尝试通过约束来定位视图