Динамика Swift UIKit — изменение величины силы UIPushBehavior в зависимости от расстояния от центра источника

Может кто-нибудь предложить, как я могу варьировать силу величины 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)
                
            }

1 ответ

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

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