     }
     
     func handleTap(gr : UITapGestureRecognizer) {
-        switch self.saveState {
-            case .Idle:
-                self.saveGradient()
-            case .Saved:
-                self.hideSaveIndicator()
-                self.hideInfoButton()
-            case .Saving:
-                return // save in progress... do nothing
-        }
-    }
-    
-    private func cornerClosestToPoint(point: CGPoint, inView view: UIView) -> CGPoint {
-        var cornerPoint = CGPointZero
-        if point.x > CGRectGetMidX(view.bounds) {
-            cornerPoint.x = CGRectGetMaxX(view.bounds)
-        }
-        if point.y > CGRectGetMidY(view.bounds) {
-            cornerPoint.y = CGRectGetMaxY(view.bounds)
-        }
-        return cornerPoint
+        switch self.state {
+        case .Idle:
+            self.saveGradient()
+        case .Saved:
+            self.hideSaveIndicator()
+            self.hideInfoButton()
+            self.hideCredits()
+        case .Saving:
+            return // save in progress... do nothing
+        case .CreditsShown:
+            self.hideCredits()
+        }
+    }
+
+    private func transformForCorner(corner : Corner) -> CGAffineTransform {
+        switch corner {
+        case .TopLeft:
+            return CGAffineTransformIdentity
+        case .TopRight:
+            return CGAffineTransformMakeRotation(CGFloat(M_PI))
+        case .BottomLeft:
+            return CGAffineTransformIdentity
+        case .BottomRight:
+            return CGAffineTransformMakeRotation(CGFloat(M_PI))
+        }
+    }
+    
+    private func anchorPointForCorner(corner : Corner, inView view : UIView, inset : CGFloat = 0) -> CGPoint {
+        switch corner {
+        case .TopLeft:
+            return CGPointMake(inset, inset)
+        case .TopRight:
+            return CGPointMake(CGRectGetMaxX(view.bounds) - inset, inset)
+        case .BottomLeft:
+            return CGPointMake(inset,CGRectGetMaxY(view.bounds) - inset)
+        case .BottomRight:
+            return CGPointMake(CGRectGetMaxX(view.bounds) - inset,CGRectGetMaxY(view.bounds) - inset)
+        }
     }
     
     private func angleOfTouchPoint(point: CGPoint, fromPoint: CGPoint) -> CGFloat {

    }
    
    private func saveGradient () {
        self.saveState = .Saving
        let gradient = self.imageFromCurrentGradient()
        
        UIImageWriteToSavedPhotosAlbum(gradient, self, "image:didFinishSavingWithError:contextInfo:", nil)

        if gr.state == .Began {
            
            // find the corner closest to the touch point
            let closestCorner = self.view.cornerClosestToPoint(touchPoint)
            let anchor = anchorPointForCorner(closestCorner, inView: self.view)
            
            self.anchorPoint = anchor
            
            // calculate which colour to change
            
