class LightView: UIView {
dynamic var progress: CGFloat = 0.0
override init(frame: CGRect) {
super.init(frame: frame)
self.addObserver()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
deinit {
self.removeObserver()
}
func addObserver() {
self.addObserver(self, forKeyPath: "progress", options: .New, context: nil)
}
func removeObserver() {
self.removeObserver(self, forKeyPath: "progress")
}
func configUI() {
let lightIncreaseImage = UIImage.init(named: "Light_Increase")!
let lightIncreaseImageSize = lightIncreaseImage.size
let lightIncreaseImageView = UIImageView.init(image: lightIncreaseImage)
lightIncreaseImageView.frame = CGRect(x: (self.frame.width - lightIncreaseImageSize.width)/2.0, y: 0, width: lightIncreaseImageSize.width, height: lightIncreaseImageSize.height)
self.addSubview(lightIncreaseImageView)
self.layer.addSublayer(undoneLayer)
self.layer.addSublayer(doneLayer)
let lightDecreaseImage = UIImage.init(named: "Light_Decrease")!
let lightDecreaseImageSize = lightDecreaseImage.size
let lightDecreaseImageView = UIImageView.init(image: lightDecreaseImage)
lightDecreaseImageView.frame = CGRect(x: (self.frame.width - lightDecreaseImageSize.width)/2.0, y: self.frame.height - lightDecreaseImageSize.height, width: lightDecreaseImageSize.width, height: lightDecreaseImageSize.height)
self.addSubview(lightDecreaseImageView)
}
private lazy var undoneLayer: CALayer = {
var undoneLayer = CALayer()
undoneLayer.frame = CGRectMake((self.frame.width - 4)/2.0, (self.frame.height - 140)/2.0, 4, 140)
undoneLayer.backgroundColor = UIColor.init(white: 1, alpha: 0.2).CGColor
return undoneLayer
}()
private lazy var doneLayer: CALayer = {
var doneLayer = CALayer()
doneLayer.frame = CGRectMake((self.frame.width - 4)/2.0, (self.frame.height - 140)/2.0 + 100, 4, 40)
doneLayer.backgroundColor = UIColor.init(white: 1, alpha: 0.6).CGColor
return doneLayer
}()
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if keyPath == "progress" {
let doneValue = change!["new"] as! CGFloat
let progress = doneValue * 140
UIScreen.mainScreen().brightness = doneValue
doneLayer.frame = CGRectMake((self.frame.width - 4)/2.0, (self.frame.height - 140)/2.0 + (140 - progress), 4, progress)
}
}
}