swift - 绘制曲线时出错

时间:2016-10-27 22:45:31

标签: ios swift core-graphics

我正在尝试编写一个绘制曲线的程序。曲线越短,越接近绿色。以下是绘制圆圈的代码:

func drawCircle(percent: CGFloat) {
    // Set up all the data for the circle
    let redAmt = 1 / 100 * percent
    let greenAmt = 1 - redAmt
    let circleColor = UIColor.init(red: redAmt, green: greenAmt, blue: 0, alpha: 1)
    let lineWidth = CGFloat(12)
    let centerX = self.frame.size.width / 2
    let centerY = self.frame.size.height / 2
    let radius = (self.frame.size.width - lineWidth) / 2
    // Clear the area where the circle is going to be drawn
    let clearCirclePath = UIBezierPath(arcCenter: CGPoint(x: centerX, y: centerY), radius: radius, startAngle: CGFloat(0), endAngle: CGFloat(M_PI * 2), clockwise: true)
    clearColor.setStroke()
    clearCirclePath.lineWidth = lineWidth
    clearCirclePath.stroke()
    // Draw the circle
    let circlePath = UIBezierPath(arcCenter: CGPoint(x: centerX, y: centerY), radius: radius, startAngle: CGFloat(0), endAngle: CGFloat(M_PI * 2) * percent / 100, clockwise: true)
    circleColor.setStroke()
    circlePath.lineWidth = lineWidth
    circlePath.stroke()
}

drawRect(rect: CGRect)调用时效果很好,但是当我尝试调用另一个文件时,它不起作用。它在视图控制器内的视图中绘制弧。它给我的错误是:ExerciseTracker[7270] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

非常感谢!

(我正在使用Xcode 7.3.1)

1 个答案:

答案 0 :(得分:2)

您必须在有效的上下文中绘图。 drawRect:提供了这样一个有效的背景。简单地将代码置于drawRect:之外是行不通的,除非您明确创建自己的上下文,例如通过绘图创建图像的位图上下文。

drawCircle方法中的代码必须位于自定义视图类的drawRect:方法中。不要将percent作为参数传递,而是将其设置为实例变量。然后,只要您更新percent的值,就可以调用setNeedsDisplay()来触发视图重绘自己。