2015-08-09 49 views
0

我制作了三角形视图,名为UpTriangleView。它用于显示投票。当他们被挖掘时,我想改变他们的颜色。我想从实例UIColor.grayColor().setStroke(),但我不知道如何做到这一点。如果你知道,请告诉我如何去做。谢谢你的爱。如何在Swift上使用drawRect更改三角形的颜色

class UpTriangleView: UIView { 

    override func drawRect(rect: CGRect) { 
    self.backgroundColor = UIColor.clearColor() 
    // Get Height and Width 
    let layerHeight = self.layer.frame.height 
    let layerWidth = self.layer.frame.width 

    // Create Path 
    let line = UIBezierPath() 

    // Draw Points 
    line.moveToPoint(CGPointMake(0, layerHeight)) 
    line.addLineToPoint(CGPointMake(layerWidth, layerHeight)) 
    line.addLineToPoint(CGPointMake(layerWidth/2, 0)) 
    line.addLineToPoint(CGPointMake(0, layerHeight)) 
    line.closePath() 

    // Apply Color 
    UIColor.grayColor().setStroke() 
    UIColor.grayColor().setFill() 
    line.lineWidth = 3.0 
    line.fill() 
    line.stroke() 

    // Mask to Path 
    let shapeLayer = CAShapeLayer() 
    shapeLayer.path = line.CGPath 
    self.layer.mask = shapeLayer 
    } 
} 


class QATableViewCell : UITableViewCell{ 
    @IBOutlet weak var upTriangleView: UpTriangleView! 
} 

回答

6

属性添加到您的UpTriangleView就是要绘制它的颜色。实施didSet并调用setNeedsDisplay()如果颜色设置:

class UpTriangleView: UIView { 

    var color = UIColor.gray { 
     didSet { 
      self.setNeedsDisplay() 
     } 
    } 

    override func draw(_ rect: CGRect) { 
     self.backgroundColor = .clear 

     // Get Height and Width 
     let layerHeight = self.layer.bounds.height 
     let layerWidth = self.layer.bounds.width 

     // Create Path 
     let line = UIBezierPath() 

     // Draw Points 
     line.move(to: CGPoint(x: 0, y: layerHeight)) 
     line.addLine(to: CGPoint(x: layerWidth, y: layerHeight)) 
     line.addLine(to: CGPoint(x: layerWidth/2, y: 0)) 
     line.addLine(to: CGPoint(x: 0, y: layerHeight)) 
     line.close() 

     // Apply Color 
     color.setStroke() 
     color.setFill() 
     line.lineWidth = 3.0 
     line.fill() 
     line.stroke() 

     // Mask to Path 
     let shapeLayer = CAShapeLayer() 
     shapeLayer.path = line.cgPath 
     self.layer.mask = shapeLayer 
    } 
} 

现在,演示它在一个游乐场(见下图的结果):

let utv = UpTriangleView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 
utv.color = .yellow // now triangle is yellow 
utv.color = .red  // now triangle is red 

setNeedsDisplay会告诉你的视图需要重绘iOS和将使用新设置的颜色再次调用drawRect

Picture of triangle in Playground

+0

谢谢vacawama !!我懂了!!!! – lalala

+0

谢谢vacawama ...它像一个魅力工作...真的很有帮助。 –

相关问题