         return true;
     }
     
+    
+    override func viewWillAppear(animated: Bool) {
+        super.viewWillAppear(animated)
+        
+        // add instructions
+        let label = UILabel(frame: self.view.bounds)
+        label.autoresizingMask = .FlexibleTopMargin | .FlexibleLeftMargin | .FlexibleRightMargin | .FlexibleBottomMargin
+        label.backgroundColor = UIColor.blackColor()
+        label.numberOfLines = 0
+        label.font = UIFont(name: "Helvetica Neue", size: 30)
+        label.userInteractionEnabled = true
+        var paragraphStyle = NSMutableParagraphStyle()
+        paragraphStyle.alignment = .Center
+        paragraphStyle.lineHeightMultiple = 2
+        label.attributedText = NSAttributedString(string: NSLocalizedString("instructions", comment: "app instructions").uppercaseStringWithLocale(NSLocale.currentLocale()), attributes:[NSForegroundColorAttributeName : UIColor.whiteColor(), NSParagraphStyleAttributeName : paragraphStyle])
+        self.view.addSubview(label)
+        self.instructions = label;
+        
+    }
+    
     override func viewDidAppear(animated: Bool) {
         super.viewDidAppear(animated)
         self.becomeFirstResponder()
+        if let label = self.instructions {
+            UIView.animateWithDuration(0.5, delay: 2, options: nil, animations: { () -> Void in
+                label.alpha = 0
+                }) { (finished : Bool) -> Void in
+                    label.removeFromSuperview()
+                    self.instructions = nil
+            }
+        }
     }
     
     override func viewWillDisappear(animated: Bool) {

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

    }
    
    func handleTap(gr : UITapGestureRecognizer) {
        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 {
