2015-02-27 3 views
4

Я пробовал так много разных способов добавить пакет графиков из GitHub или использовать основные сюжеты или объединить объектив-c в быстрый, но во время процесса возникло много проблем, и на этой неделе я не сделал успешную диаграмму. Я очень подавлен.круговая диаграмма/график в swift

Есть ли кто-нибудь, кто сумеет создать круговую диаграмму в быстром? Аналогичные вопросы, похоже, не имеют успешных ответов.

Буду признателен за вашу помощь!

ответ

3

Не вдавливайте. Вам просто нужно добавить более конкретный вопрос, чтобы получить дополнительную помощь. Например, если вы начинаете с нуля и пытаетесь интегрировать пакет графиков из 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) 
     } 
    } 
+0

Привет, большое спасибо за ваше одобрение! Я попытался запустить ваш код, но появилось сообщение об ошибке сразу: let ctx = UIGraphicsGetCurrentContext(). Сначала он показал «insert», «», затем он показал, что «привязка переменной шаблона не может появляться в выражении». Таким образом, остальная часть кода с использованием «ctx» имела сообщение об ошибке. Это что-то не так с моими настройками, что я не могу запустить его? – Mushroomcloud

+0

Произошла ошибка копирования, остальная часть вызова CGRectMake отсутствовала. Я обновил ответ. Я искренне хочу сказать, что я должен сказать, что вы должны научиться определять и понимать такие легкие ошибки самостоятельно, иначе у вас будет трудное путешествие вперед. Может, сначала начать с более простой программы, чтобы изучить основы? –

-1

Вы пытались найти учебник CorePlot с Swift? Возможно this one.

В противном случае вы можете посмотреть другие рамки.

+0

Большое спасибо! Я посмотрел его один раз раньше и не смог установить стручки. Но теперь это работает, спасибо! – Mushroomcloud

+0

Добро пожаловать! Возможно, вы захотите принять этот ответ, если ссылка вам помогла :) – lchamp

0

Мы внесли некоторые изменения в Основной Plot API, включая замену NSDecimal с NSDecimalNumber для Swift совместимости. Изменения находятся на ветке release-2.0, но не в пакете выпуска. См. Core Plot issue #96 для более подробного обсуждения проблемы.

+0

Спасибо! Я только что увидел новую ветку, я буду следовать инструкциям и попробовать! – Mushroomcloud

Смежные вопросы