2015-02-06 40 views
1

我想通過創建一個擴展UIControl的類來製作一個自定義的UISlider。我正在嘗試使用核心圖形來填充和繪製CGRects。我能夠在位置(0,0)正確地描邊和填充CGRect,但不能在任何其他位置。錯誤地使用Core Graphics

這是我看到的時候我畫我在(0,0)enter image description here

這裏UISlider是我所看到的,當我在畫我的UISlider(%10,%10)

enter image description here

我的滑塊,在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的起源繪製時,它不是在原點?我怎樣才能解決這個問題?謝謝!

回答

3

嘗試在drawRect中使用bounds代替_sliderRec_sliderRec是它在其超視圖中的位置的框架。在視圖中繪製時,您需要改用視圖的bounds屬性。