2016-09-09 3 views
2

私は、スライダの長さの1/3の位置になければならないスライダ用のセパレータを描画しようとしています。スライダ本体がうまく描かれ、セパレータを購入する - そうではない。UIBezierPathが表示されない

コードは、私が間違って何をやっている

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() 
    } 


} 

}

に従っていますか?

+0

まず、あなたのコードはそのコードにも入りますか? 'rangeSlider'はいつでもゼロにすることができます。そのパスを正しいコンテキストに描画していますか(現在のコンテキストが何であるか知っていますか?) – Putz1103

答えて

1

setFill()を呼び出していますが、stroke()を呼び出しています。塗りとストロークは別々のものです。だから、あなたはどちらか希望:

  1. は先に行くとsetFill()で塗りつぶしの色を設定したが、その後の代わりstroke()fill()を呼び出す:

    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. それともではないようstroke()を呼び出し、代わりのsetFill()を呼び出して、代わりにlineWidthを設定し、setStroke()を呼び出す:

    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() 
    
関連する問題