gpt4 book ai didi

ios - 播放自动布局时使用 UIDynamicAnimator 制作动画

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:08 26 4
gpt4 key购买 nike

我有一个 ViewController,它已在 InterfaceBuilder 中配置为对其所有 subview 使用 AutoLayout。布局工作正常。

我想使用 UIDynamicAnimator 提供的炫酷重力效果使其中一个 subview 反弹。我认为这不适用于 AutoLayout,但我试过了,确实如此。效果很好!

我的问题是,这是预期的行为吗?它会在某处引起问题吗? Apple 是否提供有关组合 AutoLayout 和 UIDynamicAnimators 的指导?

代码如下,感兴趣的可以引用:

    var boundaryFrame = self.buttonBackgroundView.frame
boundaryFrame = CGRect(x: 0,
y: boundaryFrame.origin.y + (boundaryFrame.height + 1),
width: self.view.frame.width,
height: 2)

self.animator = UIDynamicAnimator(referenceView: self.view)
var gravity = UIGravityBehavior(items: [self.buttonBackgroundView])
gravity.magnitude = 0.5

var collision = UICollisionBehavior(items: [self.buttonBackgroundView])
var boundaryId: NSMutableString = NSMutableString(string: "bottomBoundary")
let boundaryPath = UIBezierPath(rect: boundaryFrame)
collision.addBoundaryWithIdentifier(boundaryId, forPath: boundaryPath)

let bounceProperties = UIDynamicItemBehavior(items: [self.buttonBackgroundView])
bounceProperties.elasticity = 0.5

// Move it up before causing it to bounce down to its original location
self.setMeUpTopConstraint.constant = 10
self.view.setNeedsUpdateConstraints()
self.view.layoutIfNeeded()

// Start animating
animator.addBehavior(gravity)
animator.addBehavior(collision)
animator.addBehavior(bounceProperties)

最佳答案

My question is, is this the expected behavior? Is it going to cause problems somewhere? Does Apple provide any guidance around combining AutoLayout and UIDynamicAnimators?

基本上,UIKit Dynamics 不能很好地处理自动布局。基本上,规则是改变某些东西的框架/中心是与自动布局相反的——而这正是 UIKit Dynamics 所做的。您没有遇到问题的唯一原因是,您正在设置动画的 View 碰巧没有发生布局。

测试的方法是这样的。运行你的代码,然后(当动画结束时;可能你需要使用延迟性能)运行

self.view.layoutIfNeeded

这会导致布局发生。如果那一刻事情突然发生,它就会暴露问题。

关于ios - 播放自动布局时使用 UIDynamicAnimator 制作动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28405515/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com