1
我想通過創建一個擴展UIControl的類來製作一個自定義的UISlider。我正在嘗試使用核心圖形來填充和繪製CGRects。我能夠在位置(0,0)正確地描邊和填充CGRect,但不能在任何其他位置。錯誤地使用Core Graphics
這是我看到的時候我畫我在(0,0)
這裏UISlider是我所看到的,當我在畫我的UISlider(%10,%10)
我的滑塊,在AppDelegate
var slider:RGBSlider
slider = RGBSlider(frame: CGRectMake(bounds.width * 0.1, bounds.height * 0.1, bounds.width * 0.6, bounds.height * 0.15), leftColor: UIColor.blackColor(), rightColor: UIColor.redColor())
這裏作出的類聲明:
class RGBSlider: UIControl
{
//member vars
private var _sliderRec: CGRect = CGRectZero
private var _cursorRec: CGRect = CGRectZero
private var _gradient: CAGradientLayer
//initlizer
init(frame: CGRect, leftColor: UIColor, rightColor: UIColor)
{
_sliderRec = frame
//and this does not
//_sliderRec.origin.x = frame.origin.x
//_sliderRec.origin.y = frame.origin.y
//this works for some reason
//_sliderRec.origin.x = 0
//_sliderRec.origin.y = 0
_gradient = CAGradientLayer()
_gradient.colors = [leftColor, rightColor]
_gradient.locations = [0.0, 255.0]
super.init(frame: _sliderRec)
}
required init(coder aDecoder: NSCoder)
{
fatalError("init(coder:) has not been implemented")
}
//defines how to draw the slider
override func drawRect(rect: CGRect)
{
let context: CGContext! = UIGraphicsGetCurrentContext()
let strokeSize:Float = 3.0
var smallerRec = CGRectMake(_sliderRec.origin.x + CGFloat(strokeSize/2), _sliderRec.origin.y + CGFloat(strokeSize/2), (_sliderRec.size.width - CGFloat(strokeSize)), (_sliderRec.size.height - CGFloat(strokeSize)))
//fills the rectangle
CGContextAddRect(context, smallerRec)
CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor)
CGContextDrawPath(context, kCGPathFill)
//stroke in the rectangle
CGContextAddRect(context, _sliderRec)
CGContextSetStrokeColorWithColor(context, _gradient.colors[1].CGColor)
CGContextStrokeRectWithWidth(context, _sliderRec, CGFloat(strokeSize))
CGContextStrokeRect(context, _sliderRec)
CGContextDrawPath(context, kCGPathStroke)
}
}
爲什麼我的滑塊不是在我的CGRect的起源繪製時,它不是在原點?我怎樣才能解決這個問題?謝謝!