UIView.animateWithDuration swift loop animation

I’m totally new to Xcode and trying to learn Swift.

In ViewController.Swift I managed to make a box animate from one point to another. I thought it would be easy to loop this so the box will animate to one point and then animate back to its original position and then loop again. I have managed to move the object to a position and in “complete” move it back again, but that doesn’t make i loop. How can this be achieved?

  • How to get detailed language of device in swift
  • Transition to iOS 7: correct viewport setting for jQuery/iPhone Webapps viewed on iPads
  • iOS - UIActivityIndicator causing “Hides when stopped but is neither hidden or animating” warning
  • Draw text along circular path in Swift for iOS
  • Passing dictionary objects to Objective C protocol in Swift
  • Handle Touch in UiCollectionView?
  • I thought maybe this could work but i honestly don’t know:

    let boxmoves = [CGRect(x: 120, y: 220, width: 100, height: 100), CGRect(x: 120, y: 120, width: 100, height: 100)]
    for boxmove in boxmoves {
        coloredSquare.frame = boxmove
    }
    

    How could I center it based on the device-width (I assume there are some math involved?)?

    Any good newbie tutortial sites on Xcode to recommend?

    Kind regards
    Johan

    My code:

    let coloredSquare = UIView()
    
    coloredSquare.backgroundColor = UIColor.blueColor()
    
    coloredSquare.frame = CGRect(x: 120, y: 120, width: 100, height: 100)
    
    self.view.addSubview(coloredSquare)
    
    // found repeate but this will not animate as I want.
    //UIView.animateWithDuration(2.0, delay: 0.2, options: UIViewAnimationOptions.Repeat, animations: {
    UIView.animateWithDuration(2.0, animations: {
    
        coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: 100)
    
        }, completion: { finished in
            UIView.animateWithDuration(2.0, animations: {
            coloredSquare.frame = CGRect(x: 120, y: 120, width: 100, height: 100)
            })
    })
    

    Solutions Collect From Internet About “UIView.animateWithDuration swift loop animation”

    No need to do the completion block approach, just use the animation options argument:

    updated for Swift 3.0

    UIView.animate(withDuration: 2.0, delay: 0, options: [.repeat, .autoreverse], animations: {
    
        coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: 100)
    
    }, completion: nil)
    

    If for any reason you want to stop the animation later, just use:

    coloredSquare.layer.removeAllAnimations()