自定义UIButton与UIBezierPath

时间:2016-03-09 14:26:55

标签: ios swift uibutton drawrect

我正在制作自己的自定义UIButton。 我继承了UIButton类和drawRect函数 这是我的代码:

override func drawRect(rect: CGRect)
{

    let midPoint = CGPointMake(rect.midX, rect.midY)

    if !self.selected
    {
        let redCircle = UIBezierPath()
        let redCircleRadius = rect.width - self.whiteCirlceWidth - self.spaceBetweenCirclesWidth

        redCircle.addArcWithCenter(CGPointMake(rect.midX, rect.midY), radius: redCircleRadius,
            startAngle: 0 , endAngle: 2 * CGFloat(M_PI), clockwise: true)

        let shapeLayer = CAShapeLayer()
        shapeLayer.path = redCircle.CGPath

        shapeLayer.fillColor = UIColor.redColor().CGColor

        shapeLayer.strokeColor = UIColor.blackColor().CGColor

        shapeLayer.lineWidth = 4.0

        self.layer.addSublayer(shapeLayer)


        let whiteCircle = UIBezierPath()
        whiteCircle.addArcWithCenter(midPoint,
            radius: self.bounds.width / 2,
            startAngle: 0, endAngle: 2 * CGFloat(M_PI) , clockwise: true)
        UIColor.whiteColor().setFill()
        whiteCircle.fill()
    }
    else
    {

        let whiteCircle = UIBezierPath()
        whiteCircle.addArcWithCenter(midPoint,
            radius: self.bounds.width / 2,
            startAngle: 0, endAngle: 2 * CGFloat(M_PI) , clockwise: true)
        UIColor.whiteColor().setFill()
        whiteCircle.fill()


        let blankCircle = UIBezierPath()
        blankCircle.addArcWithCenter(midPoint, radius: rect.width - self.whiteCirlceWidth - self.spaceBetweenCirclesWidth,
            startAngle: 0, endAngle: 2 * CGFloat(M_PI), clockwise: true)
        UIColor.blackColor().setFill()
        blankCircle.fill()


        var rect = CGRect(origin: midPoint, size: CGSizeMake(rect.width / 2, rect.width / 2))
        rect.origin.x -= rect.origin.x / 2
        rect.origin.y -= rect.origin.y / 2

        let roundedRect = UIBezierPath(roundedRect: rect, cornerRadius: 3)
        UIColor.redColor().setFill()
        roundedRect.fill()

    }



}

当我点击按钮时,我这样做

@IBAction func recordBtnClicked(sender : UIButton)
{
    self.recordBtn.selected = !self.recordBtn.selected
    self.recordBtn.setNeedsDisplay()
}

但它没有改变任何东西! 我检查了调试器,它执行了正确的代码块。 我检查了两个街区,他们做了正确的绘图 什么错了?

1 个答案:

答案 0 :(得分:1)

我认为这是因为我添加了一个subLayer并且它卡住了我没有删除它'所以我改变了代码而没有使用子层。 每次调用drawRect

时都可以删除subLayer