swift 中的馅饼 chart/plot
pie chart/plot in swift
我尝试了很多不同的方法,从 GitHub 添加地块包或使用核心地块或将 objective-c 组合到 swift,但在这个过程中出现了很多问题,并且在这一周内我没有制作成功的图表。我真的很沮丧。
有没有人在swift中成功制作饼图?类似的问题似乎没有成功的答案。
非常感谢您的帮助!
您是否尝试使用 Swift 查找任何 CorePlot 教程?可能喜欢 this one。
否则,您可能想看看其他 框架。
不要沮丧。您只需添加更具体的问题即可获得更多帮助。例如,如果您从头开始并尝试集成来自 Github 的 plots 包,您必须说明是什么包,您是如何尝试集成它的,您遇到了什么错误等等。
但是,使用 CoreGraphics 功能绘制简单的饼图非常容易。这是我的代码的一个小礼物,它将进度值绘制为一个简单的黑白饼图。它只有 2 个部分,但您可以从中概括
@IBDesignable class ProgressPieIcon: UIView {
@IBInspectable var progress : Double = 0.0 {
didSet {
self.setNeedsDisplay()
}
}
required init(coder aDecoder: NSCoder) {
super.init(coder:aDecoder)
self.contentMode = .Redraw
}
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = UIColor.clearColor()
self.contentMode = .Redraw
}
override func drawRect(rect: CGRect) {
let color = UIColor.blackColor().CGColor
let lineWidth : CGFloat = 2.0
// Calculate box with insets
let margin: CGFloat = lineWidth
let box0 = CGRectInset(self.bounds, margin, margin)
let side : CGFloat = min(box0.width, box0.height)
let box = CGRectMake((self.bounds.width-side)/2, (self.bounds.height-side)/2,side,side)
let ctx = UIGraphicsGetCurrentContext()
// Draw outline
CGContextBeginPath(ctx)
CGContextSetStrokeColorWithColor(ctx, color)
CGContextSetLineWidth(ctx, lineWidth)
CGContextAddEllipseInRect(ctx, box)
CGContextClosePath(ctx)
CGContextStrokePath(ctx)
// Draw arc
let delta : CGFloat = -CGFloat(M_PI_2)
let radius : CGFloat = min(box.width, box.height)/2.0
func prog_to_rad(p: Double) -> CGFloat {
let rad = CGFloat(p * 2 * M_PI)
return rad + delta
}
func draw_arc(s: CGFloat, e: CGFloat, color: CGColor) {
CGContextBeginPath(ctx)
CGContextMoveToPoint(ctx, box.midX, box.midY)
CGContextSetFillColorWithColor(ctx, color)
CGContextAddArc(
ctx,
box.midX,
box.midY,
radius-lineWidth/2,
s,
e,
0)
CGContextClosePath(ctx)
CGContextFillPath(ctx)
}
if progress > 0 {
let s = prog_to_rad(0)
let e = prog_to_rad(min(1.0, progress))
draw_arc(s, e, color)
}
}
我们对核心情节 API 进行了一些更改,包括将 NSDecimal
替换为 NSDecimalNumber
,以实现 Swift 兼容性。这些更改在 release-2.0
分支上,尚未在发布包中。有关此问题的更多讨论,请参阅 Core Plot issue #96。
我尝试了很多不同的方法,从 GitHub 添加地块包或使用核心地块或将 objective-c 组合到 swift,但在这个过程中出现了很多问题,并且在这一周内我没有制作成功的图表。我真的很沮丧。
有没有人在swift中成功制作饼图?类似的问题似乎没有成功的答案。
非常感谢您的帮助!
您是否尝试使用 Swift 查找任何 CorePlot 教程?可能喜欢 this one。
否则,您可能想看看其他 框架。
不要沮丧。您只需添加更具体的问题即可获得更多帮助。例如,如果您从头开始并尝试集成来自 Github 的 plots 包,您必须说明是什么包,您是如何尝试集成它的,您遇到了什么错误等等。
但是,使用 CoreGraphics 功能绘制简单的饼图非常容易。这是我的代码的一个小礼物,它将进度值绘制为一个简单的黑白饼图。它只有 2 个部分,但您可以从中概括
@IBDesignable class ProgressPieIcon: UIView {
@IBInspectable var progress : Double = 0.0 {
didSet {
self.setNeedsDisplay()
}
}
required init(coder aDecoder: NSCoder) {
super.init(coder:aDecoder)
self.contentMode = .Redraw
}
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = UIColor.clearColor()
self.contentMode = .Redraw
}
override func drawRect(rect: CGRect) {
let color = UIColor.blackColor().CGColor
let lineWidth : CGFloat = 2.0
// Calculate box with insets
let margin: CGFloat = lineWidth
let box0 = CGRectInset(self.bounds, margin, margin)
let side : CGFloat = min(box0.width, box0.height)
let box = CGRectMake((self.bounds.width-side)/2, (self.bounds.height-side)/2,side,side)
let ctx = UIGraphicsGetCurrentContext()
// Draw outline
CGContextBeginPath(ctx)
CGContextSetStrokeColorWithColor(ctx, color)
CGContextSetLineWidth(ctx, lineWidth)
CGContextAddEllipseInRect(ctx, box)
CGContextClosePath(ctx)
CGContextStrokePath(ctx)
// Draw arc
let delta : CGFloat = -CGFloat(M_PI_2)
let radius : CGFloat = min(box.width, box.height)/2.0
func prog_to_rad(p: Double) -> CGFloat {
let rad = CGFloat(p * 2 * M_PI)
return rad + delta
}
func draw_arc(s: CGFloat, e: CGFloat, color: CGColor) {
CGContextBeginPath(ctx)
CGContextMoveToPoint(ctx, box.midX, box.midY)
CGContextSetFillColorWithColor(ctx, color)
CGContextAddArc(
ctx,
box.midX,
box.midY,
radius-lineWidth/2,
s,
e,
0)
CGContextClosePath(ctx)
CGContextFillPath(ctx)
}
if progress > 0 {
let s = prog_to_rad(0)
let e = prog_to_rad(min(1.0, progress))
draw_arc(s, e, color)
}
}
我们对核心情节 API 进行了一些更改,包括将 NSDecimal
替换为 NSDecimalNumber
,以实现 Swift 兼容性。这些更改在 release-2.0
分支上,尚未在发布包中。有关此问题的更多讨论,请参阅 Core Plot issue #96。