Swift UIKit 动态 - 根据与源中心的距离改变 UIPushBehavior 力的大小

Swift UIKit dynamics - Vary UIPushBehavior force magnitude by distance from center of source

有人可以建议我如何根据与源的距离来改变 UIPushBehavior 大小力。反映风扇的风力对另一个物体的影响。所以物体离风扇越近,力越大。

if String(describing: identifier) == "fan1" {
                self.push = UIPushBehavior(items: [self.object], mode: .instantaneous)
                self.push.setAngle(.pi/4, magnitude: 1)
                self.animator.addBehavior(self.push)
                self.push.addItem(self.object)
                
            }

使用 UIFieldBehaviour to create a linear gravitational field in the direction of the fan. Then you can specify a falloff:

var forceField: UIFieldBehaviour!

// ...

forceField = UIFieldBehavior.linearGravityField(direction: CGVector(dx: 1, dy: -5))

// example values for a "fan" on the bottom left blowing mostly upwards:
forceField.position = CGPoint(x: view.bounds.minX, y: view.bounds.maxY)
forceField.region = UIRegion(radius: 3000)
forceField.minimumRadius = 100
forceField.falloff = 5
forceField.strength = 10
forceField.addItem(view1)
forceField.addItem(view2)
animator.addBehavior(forceField)

使用这些值玩得开心!

在两个视图中添加碰撞、另一个重力行为和一个动态项目行为,我们得到以下效果:

我觉得左下角是个扇子!

如果你的风扇在一个角落并且“径向”吹气,你也可以选择一个位于风扇所在位置的径向引力场,但请注意你应该为 strength 使用负值案例说场排斥而不是吸引。