Russell Gordon

Defining an Animation

12 October, 2020

    Before following this tutorial, be sure you've created a new animation file to work within.

    Drawing on the Canvas

    Say that we want a square to appear on the canvas of this animation.

    Anything we want to be animated must be specified in the draw function.

    Add this code at line 30:

    // Draw a square in the middle of the canvas
    canvas.drawRectangle(at: Point(x: 250, y: 250), width: 50, height: 50, anchoredBy: .centre)
    

    Run the animation. It appears to be static – the square does not move.

    Remember, though – what's actually happening is that a new square is being drawn about sixty times per second over the prior square.

    It's just that right now, the square is always drawn in the same position.

    Defining a Property

    Let's add a property. After line 17, add this property:

    // Vertical position
    var y = 250
    

    The scope of this property is the entire MovingSquare class – we can change it's value anywhere inside the class.

    Adjust the line of code that draws the rectangle, so that the point the square is drawn at is no longer:

    Point(x: 250, y: 250)
    

    ... but is instead:

    Point(x: 250, y: y)
    

    Now run the animation. What's changed?

    Nothing – the y property is initialized at 250, and never changes.

    Changing a Property to Drive the Animation

    Add the following line of code above the line where the square is drawn, inside the draw method:

    // Change the vertical position
    y += 1
    

    Now run the animation. Why does the square move?

    Remember, the draw function is automatically run about sixty times per second by the Animation project.

    Since we are changing the y property (adding 1 to its value each time), and the square is drawn using that property, the square moves.

    If you're still not quite sure what's going on, add this line of code inside the draw function:

    print("The y position is: \(y)")