gpt4 book ai didi

ios - 使用 UIDynamics 重力为 CGRects 设置动画

转载 作者:可可西里 更新时间:2023-11-01 02:05:31 25 4
gpt4 key购买 nike

我的目标是让一堆具有 CGRect 属性的 UIViews 从屏幕外掉落然后堆积起来。现在,我有一个圈子在工作,但每次我尝试添加另一个圈子时,它们都不再具有动画效果。我正在使用 UIDynamics 及其 gravity 函数。这是我的代码:

func addBox(location: CGRect) -> UIView {
let newBox = UIView(frame: location)
newBox.backgroundColor = UIColor(red: 186.0/255.0, green: 216.0/255.0, blue: 242.0/255.0, alpha: 1.0)
newBox.layer.cornerRadius = newBox.frame.width/2

hView.insertSubview(newBox, at: 0)

return newBox
}


addBox(location: CGRect(x: 100, y: -100, width: 100, height: 100))

var animator: UIDynamicAnimator? = nil;
let gravity = UIGravityBehavior()
var collision: UICollisionBehavior!
animator = UIDynamicAnimator(referenceView: hView)

func createAnimatorStuff(box: UIView) {
collision = UICollisionBehavior(items: [box])
collision.translatesReferenceBoundsIntoBoundary = true
animator?.addBehavior(collision)

gravity.addItem(box)
gravity.gravityDirection = CGVector(dx: 0, dy: 0.8)
animator?.addBehavior(gravity)

}

func dropDown() {
let xVal = 100
let xVal2 = 700

let box = addBox(location: CGRect(x: xVal, y: 100, width: 100, height: 100))
let box2 = addBox(location: CGRect(x: xVal2, y: 100, width: 100, height: 100))
createAnimatorStuff(box: box)
createAnimatorStuff(box: box2)
}
dropDown()

如果有人可以帮助我并调整我的代码以创建更多的圆圈下降然后堆积,我将非常感激。真的。请提出任何问题,并在此先感谢您。

最佳答案

(注意:问题已根据这些建议进行了更新,所以这就是为什么它似乎建议已经完成的事情)

您遇到的一般问题是您将 box 设为全局变量,并且不断重新初始化 UIDynamicAnimator。所以……

删除盒子变量,然后

改变:

func addBox(location: CGRect) 

到:

func addBox(location: CGRect) -> UIView

并且 在最后返回 newBox

然后,改变:

func createAnimatorStuff() {

到:

func createAnimatorStuff(box: UIView) {

addBox(location: CGRect(x: xVal, y: 100, width: 100, height: 100))
createAnimatorStuff()

let box = addBox(location: CGRect(x: xVal, y: 100, width: 100, height: 100))
createAnimatorStuff(box: box)

最后,不要为每次调用都创建一个新的 UIDynamicAnimator -- 创建一个并分享它。你可以这样做

let animator = UIDynamicAnimator(referenceView: hView)

(另外,在 Swift 中你不需要分号)

关于ios - 使用 UIDynamics 重力为 CGRects 设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43098987/

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