Не вдавливайте. Вам просто нужно добавить более конкретный вопрос, чтобы получить дополнительную помощь. Например, если вы начинаете с нуля и пытаетесь интегрировать пакет графиков из Github, вы должны сказать, какой пакет, как вы пытались его интегрировать, какие ошибки вы получаете и т.д.
Однако, рисуя простой пирог диаграмма довольно проста с функциональностью 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)
}
}
Привет, большое спасибо за ваше одобрение! Я попытался запустить ваш код, но появилось сообщение об ошибке сразу: let ctx = UIGraphicsGetCurrentContext(). Сначала он показал «insert», «», затем он показал, что «привязка переменной шаблона не может появляться в выражении». Таким образом, остальная часть кода с использованием «ctx» имела сообщение об ошибке. Это что-то не так с моими настройками, что я не могу запустить его? – Mushroomcloud
Произошла ошибка копирования, остальная часть вызова CGRectMake отсутствовала. Я обновил ответ. Я искренне хочу сказать, что я должен сказать, что вы должны научиться определять и понимать такие легкие ошибки самостоятельно, иначе у вас будет трудное путешествие вперед. Может, сначала начать с более простой программы, чтобы изучить основы? –