-1

我在以编程方式创建的 UIView 上添加了一个 UIDynamicAnimator。现在我想在 Storyboard 中创建 UIView,因为我想使用自动布局。有人知道我必须改变什么才能使用 Storyboard 中的 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)

}
4

1 回答 1

1

您不必对已显示的代码进行任何更改;它保持不变。animator继续生活在它现在居住的任何地方。

可能需要成为一个出口,sideBarContainerView以便您可以获取对该视图的引用,如果它现在是在情节提要而不是在代码中创建的,但是从这里很难知道,因为您没有显示代码的那部分并且您没有在问题中指定“我的 UIView”是什么意思——我假设这指的是sideBarContainerView.

最后请注意,UIKit 动态和自动布局是彼此的敌人。如果视图受到自动布局的影响,则无法使用 UIKit Dynamics 为视图设置动画,因为 UIKitDynamics 会尝试更改视图的框架,而自动布局会尝试通过约束来定位视图。

于 2015-08-23T16:09:27.917 回答