     
     private func configureStar() {
         // Center the star on the page, and keep it centered on pages 0 and 1
-        scrollView.addConstraint(NSLayoutConstraint(item: star, attribute: .Width, relatedBy: .LessThanOrEqual, toItem: scrollView, attribute: .Width, multiplier: 1.3, constant: 0))
-        scrollView.addConstraint(NSLayoutConstraint(item: star, attribute: .Height, relatedBy: .LessThanOrEqual, toItem: scrollView, attribute: .Height, multiplier: 1, constant: 0))
-        scrollView.addConstraint(NSLayoutConstraint(item: star, attribute: .Top, relatedBy: .GreaterThanOrEqual, toItem: scrollView, attribute: .Top, multiplier: 1, constant: 30))
-        scrollView.addConstraint(NSLayoutConstraint(item: star, attribute: .Height, relatedBy: .Equal, toItem: star, attribute: .Width, multiplier: 1, constant: 0))
-        scrollView.addConstraint(NSLayoutConstraint(item: star, attribute: .CenterY, relatedBy: .Equal, toItem: scrollView, attribute: .CenterY, multiplier: 1, constant: 0))
+        let width = NSLayoutConstraint(item: star, attribute: .Width, relatedBy: .LessThanOrEqual, toItem: scrollView, attribute: .Width, multiplier: 1.3, constant: 0)
+        let height = NSLayoutConstraint(item: star, attribute: .Height, relatedBy: .LessThanOrEqual, toItem: scrollView, attribute: .Height, multiplier: 1, constant: 0)
+        let top = NSLayoutConstraint(item: star, attribute: .Top, relatedBy: .GreaterThanOrEqual, toItem: scrollView, attribute: .Top, multiplier: 1, constant: 30)
+        let aspect = NSLayoutConstraint(item: star, attribute: .Height, relatedBy: .Equal, toItem: star, attribute: .Width, multiplier: 1, constant: 0)
+        let centerY = NSLayoutConstraint(item: star, attribute: .CenterY, relatedBy: .Equal, toItem: scrollView, attribute: .CenterY, multiplier: 1, constant: 0)
+        NSLayoutConstraint.activateConstraints([width, height, top, aspect, centerY])
         keepView(star, onPages: [0,1])
         
         // Scale up the star to 7 times its original size between pages 0 and 1, with a quadratic Ease In easing function

        animator.addAnimation(musicStandVerticalAnimation)
        
        // Lay out the music notes
        scrollView.addConstraint(NSLayoutConstraint(item: musicNotes, attribute: .Width, relatedBy: .Equal, toItem: musicStand, attribute: .Width, multiplier: 1, constant: 0))
        scrollView.addConstraint(NSLayoutConstraint(item: musicNotes, attribute: .Height, relatedBy: .Equal, toItem: musicStand, attribute: .Height, multiplier: 1, constant: 0))
        scrollView.addConstraint(NSLayoutConstraint(item: musicNotes, attribute: .CenterY, relatedBy: .Equal, toItem: musicStand, attribute: .CenterY, multiplier: 1, constant: 0))
        
        // Move the music notes in quickly from the right when we change from page 0.5 to 1, and keep them centered on pages 1 and 2
        keepView(musicNotes, onPages: [2, 1, 2], atTimes: [0.5, 1, 2], withAttribute: .Right)
    }
    
    private func configurePageText() {
        // Keep the page2Text slightly above center on page 2
        scrollView.addConstraint(NSLayoutConstraint(item: page2Text, attribute: .CenterY, relatedBy: .Equal, toItem: scrollView, attribute: .CenterY, multiplier: 0.95, constant: 0))
        keepView(page2Text, onPage: 2)
        
        // Keep the page3Text centered on page 3
        scrollView.addConstraint(NSLayoutConstraint(item: page3Text, attribute: .CenterY, relatedBy: .Equal, toItem: scrollView, attribute: .CenterY, multiplier: 1, constant: 0))
        keepView(page3Text, onPage: 3)
    }
    
    private func configureClouds() {
        // Lay out the big cloud
        let bigCloudVerticalConstraint = NSLayoutConstraint(item: bigCloud, attribute: .CenterY, relatedBy: .Equal, toItem: scrollView, attribute: .Top, multiplier: 1, constant: 0)
        scrollView.addConstraint(bigCloudVerticalConstraint)
        scrollView.addConstraint(NSLayoutConstraint(item: bigCloud, attribute: .Width, relatedBy: .LessThanOrEqual, toItem: scrollView, attribute: .Width, multiplier: 0.78, constant: 0))
        scrollView.addConstraint(NSLayoutConstraint(item: bigCloud, attribute: .Height, relatedBy: .LessThanOrEqual, toItem: scrollView, attribute: .Height, multiplier: 0.2, constant: 0))
        scrollView.addConstraint(NSLayoutConstraint(item: bigCloud, attribute: .Height, relatedBy: .Equal, toItem: bigCloud, attribute: .Width, multiplier: 0.45, constant: 0))
        
        // Keep the big cloud slightly to the right on pages 1 and 2, and zoom it out to the left between pages 2 and 3
        keepView(bigCloud, onPages: [1.35, 2.35, 1.8], atTimes: [1, 2, 3])

        animator.addAnimation(bigCloudVerticalAnimation)
        
        // Lay out the little cloud
        let littleCloudBottom = NSLayoutConstraint(item: littleCloud, attribute: .Bottom, relatedBy: .Equal, toItem: bigCloud, attribute: .Top, multiplier: 1, constant: 20)
        let littleCloudWidth = NSLayoutConstraint(item: littleCloud, attribute: .Width, relatedBy: .Equal, toItem: bigCloud, attribute: .Height, multiplier: 1, constant: 0)
        let littleCloudAspect = NSLayoutConstraint(item: littleCloud, attribute: .Height, relatedBy: .Equal, toItem: littleCloud, attribute: .Width, multiplier: 0.5, constant: 0)
        NSLayoutConstraint.activateConstraints([littleCloudBottom, littleCloudWidth, littleCloudAspect])
        
        // Keep the little cloud slightly to the left on pages 1 and 2
        keepView(littleCloud, onPages: [0.75, 1.75], atTimes: [1, 2])
        
        // Lay out the IFTTT cloud on the bottom half of the view
        NSLayoutConstraint(item: iftttCloud, attribute: .CenterY, relatedBy: .Equal, toItem: scrollView, attribute: .CenterY, multiplier: 1.5, constant: 0).active = true
        
        // Zoom in the IFTTT cloud from the right between pages 2 and 3
        keepView(iftttCloud, onPages: [3.5, 3], atTimes: [2, 3])
