首页 > 解决方案 > 如何制作这个浮动视图动画

问题描述

如何使用 uiviews 在 swift uikit 中制作此浮动视图动画

我已尝试使用此代码并多次调用推送功能

导入 UIKit

lazy var collision: UICollisionBehavior = {
    let collision = UICollisionBehavior()
    collision.translatesReferenceBoundsIntoBoundary = true
    collision.collisionDelegate = self
    collision.collisionMode = .everything
    return collision
}()

lazy var itemBehaviour: UIDynamicItemBehavior = {
    let behaviou = UIDynamicItemBehavior()
    behaviou.allowsRotation = false
    return behaviou
}()

func addingPushBehaviour(onView view: UIDynamicItem ,animationAdded: Bool = false) {
    let push = UIPushBehavior(items: [view], mode: .instantaneous)
   
    push.angle = CGFloat(arc4random())
    push.magnitude = 0.005
    
    push.action = { [weak self] in
        self?.removeChildBehavior(push)
    }
    addChildBehavior(push)
}

func addItem(withItem item: UIDynamicItem) {
    collision.addItem(item)
    itemBehaviour.addItem(item)
    addingPushBehaviour(onView: item)
}

override init() {
    super.init()
    addChildBehavior(collision)
    addChildBehavior(itemBehaviour)
}

var mainView: UIView?
convenience init(animator: UIDynamicAnimator , onView: UIView) {
    self.init()
    self.mainView = onView
    animator.addBehavior(self)
    
}

标签: iosswiftuikitcore-animationuikit-dynamics

解决方案


将您的视图设置为正方形,使用 backroundColor 和cornerRadius = height/2 以获得您在示例中显示的圆形彩色视图外观。

UIViewPropertyAnimator使用几秒钟的持续时间创建 UIView 动画,您可以将每个视图动画到一个位置,该位置距其“锚”位置的随机距离在每个维度中 < 16 个像素。(谷歌使用 . 创建动画UIViewPropertyAnimator。你应该可以在网上找到很多例子。)


推荐阅读