     // MARK: Initializers
 	convenience init() {
         self.init()
-        backgroundColor = UIColor.clearColor()
+		commonInit()
     }
     
     public override init(frame: CGRect) {
         super.init(frame: frame)
-        backgroundColor = UIColor.clearColor()
-    }
-    
-    public required init(coder aDecoder: NSCoder) {
+       	commonInit()
+    }
+    
+    public required init?(coder aDecoder: NSCoder) {
         super.init(coder: aDecoder)
-        backgroundColor = UIColor.clearColor()
-    }
+        commonInit()
+    }
+	
+	func commonInit() {
+		backgroundColor = UIColor.clearColor()
+	}
     
     // MARK: UIControl methods
-    public override func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) -> Bool {
+    public override func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
         super.beginTrackingWithTouch(touch, withEvent: event)
         
         updateForTouch(touch, modifyHue: true)

        return true
    }
    
    public override func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) -> Bool {
        super.continueTrackingWithTouch(touch, withEvent: event)
        
        updateForTouch(touch, modifyHue: touchInside)

    private func updateForTouch (touch: UITouch, modifyHue: Bool) {
        if modifyHue {
            // Modify the hue at constant lightness
            let locationInView = touch.locationInView(self)
            hue = 1 - (locationInView.y / frame.height)
            lightness = 0.5
        } else {
            // Modify the lightness for the current hue
            let locationInSuperview = touch.locationInView(superview)
            lightness = 1 - (locationInSuperview.y / superview!.frame.height)
        }
    }
