2016-09-09 6 views
2

Ich versuche, ein Trennzeichen für den Schieberegler zu zeichnen, der an der Position von 1/3 der Schiebereglerlänge sein muss. Der Slider Körper zieht erfolgreich, kaufen Trennzeichen - nicht, es zeigt nicht.UIBezierPath erscheint nicht

-Code folgt

class RangeSliderTrackLayer:CALayer { 
weak var rangeSlider:RangeSlider? 

override func drawInContext(ctx: CGContext) { 

    if let slider = rangeSlider { 
     let cornerRadius = bounds.height * 1/2.0 
     let path = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius) 
     CGContextAddPath(ctx, path.CGPath) 

     CGContextSetFillColorWithColor(ctx, UIColor.lightGrayColor().CGColor) 
     CGContextAddPath(ctx, path.CGPath) 
     CGContextFillPath(ctx) 

     CGContextSetFillColorWithColor(ctx, UIColor.yellowColor().CGColor) 
     let lowerValuePosition = CGFloat(40) 
     let upperValuePosition = CGFloat(80) 
     let rect = CGRect(x: lowerValuePosition, y: 0.0, width: upperValuePosition - lowerValuePosition, height: bounds.height) 
     CGContextFillRect(ctx, rect) 

     let separatorPath = UIBezierPath() 
     var x = bounds.width/3 
     var y = bounds.height 
     separatorPath.moveToPoint(CGPoint(x: x, y: y)) 
     separatorPath.addLineToPoint(CGPoint(x: x + 2, y: y)) 
     separatorPath.addLineToPoint(CGPoint(x: x + 2, y: 0)) 
     separatorPath.addLineToPoint(CGPoint(x: x, y: 0)) 
     separatorPath.closePath() 
     UIColor.whiteColor().setFill() 
     separatorPath.stroke() 
    } 


} 

}

Was mache ich falsch?

+0

Zunächst, kommt Ihr Code sogar in diesen Code? 'rangeSlider' könnte zu keiner Zeit null sein. Sind Sie sicher, dass Sie diesen Pfad in den richtigen Kontext zeichnen (wissen Sie, was der aktuelle Kontext ist)? – Putz1103

Antwort

1

Sie rufen setFill() aber dann rufen Sie dann stroke(). Füllung und Strich sind zwei verschiedene Dinge. Also, Sie wollen entweder:

  1. Gehen Sie voran und setzen die Füllfarbe mit setFill(), aber dann rufen fill() statt stroke():

    let separatorPath = UIBezierPath() 
    var x = bounds.width/3 
    var y = bounds.height 
    separatorPath.moveToPoint(CGPoint(x: x, y: y)) 
    separatorPath.addLineToPoint(CGPoint(x: x + 2, y: y)) 
    separatorPath.addLineToPoint(CGPoint(x: x + 2, y: 0)) 
    separatorPath.addLineToPoint(CGPoint(x: x, y: 0)) 
    separatorPath.closePath() 
    UIColor.whiteColor().setFill() 
    // separatorPath.stroke() 
    separatorPath.fill() 
    
  2. Oder rufen Sie stroke() wie Sie sind es nicht, sondern statt setFill() Aufruf, setzen stattdessen lineWidth und setStroke() nennen:

    let separatorPath = UIBezierPath() 
    var x = bounds.width/3 
    var y = bounds.height 
    separatorPath.moveToPoint(CGPoint(x: x, y: y)) 
    separatorPath.addLineToPoint(CGPoint(x: x + 2, y: y)) 
    separatorPath.addLineToPoint(CGPoint(x: x + 2, y: 0)) 
    separatorPath.addLineToPoint(CGPoint(x: x, y: 0)) 
    separatorPath.closePath() 
    // UIColor.whiteColor().setFill() 
    UIColor.whiteColor().setStroke() 
    separatorPath.lineWidth = 1 
    separatorPath.stroke()