Используйте 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 пытается позиционировать представление через ограничения.

Другие вопросы по тегам