Swift UIImage cant be animated with gravity

221 views Asked by At

I've looked into everything on Google, and that is not much. Is the community for Swift really this small???

I have an image, and on a long-press, I want it to fall down with gravity and hit the bottom of the screen.

The error I get is

Cannot convert value of type 'UIView' to expected argument type '[UIDynamicItem]'

I have tried UILabel, UIImage, UIImageView, Rect, UIView i get this error on what ever i do. My goal is to use UIImage or UIImageView.


This is the code I'm using for the animation:

    var animator: UIDynamicAnimator!
    var gravity: UIDynamicBehavior!
    var collision : UICollisionBehavior!

    var redBoxView: UIView?
    @IBOutlet weak var detailsImageWeather: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        animator = UIDynamicAnimator(referenceView: self.view)
        let imageTap = UILongPressGestureRecognizer(target: self, action: #selector(imageTapped))
        detailsImageWeather.addGestureRecognizer(imageTap)
    }

    @objc func imageTapped() {
        var frameRect = CGRect(x: 150, y: 20, width: 60, height: 60)
        redBoxView = UIView(frame: frameRect)
        redBoxView?.backgroundColor = UIColor.red
        self.view.addSubview(redBoxView!)

        let image = detailsImageWeather.image // This is what i want to use instead of redBoxView
        gravity = UIGravityBehavior(items: redBoxView!)
        animator.addBehavior(gravity)

        collision = UICollisionBehavior (items: redBoxView!)
        collision.translatesReferenceBoundsIntoBoundary = true
        animator.addBehavior(collision)

        let behavior = UIDynamicItemBehavior(items: [redBoxView!])
        behavior.elasticity = 2
    }

What am i doing wrong? cant find any more things to try on google

1

There are 1 answers

0
badhanganesh On BEST ANSWER

The error

Cannot convert value of type 'UIView' to expected argument type '[UIDynamicItem]'

tells that you need an array of UIDynamicItem. It's easy to miss the little square brackets.

You're actually configuring your UIGravityBehavior and UICollisionBehavior with redBoxView (an object) instead of [redBoxView] (an array). That's why you get the error.


You need to change your configurations to this

gravity = UIGravityBehavior(items: [redBoxView!]) //redBoxView passed in an array

and this

collision = UICollisionBehavior (items: [redBoxView!]) //redBoxView passed in an array