2016-03-26 11 views
0

У меня есть пользовательский класс, который управляет настраиваемым представлением, имеющим горизонтальный центр на экране (который будет представлять собой сплошную линию). И я нарисовал линию, как это:Рисование нескольких кругов в одной строке CGGraphicsContext

override func drawRect(rect: CGRect) 
    { 
    let line = UIGraphicsGetCurrentContext() 
      CGContextSetLineWidth(line, 3.0) 
      CGContextSetStrokeColorWithColor(line, UIColor.redColor().CGColor) 

      CGContextMoveToPoint(line, 0, self.bounds.midY) 
      CGContextAddLineToPoint(line, self.bounds.width, self.bounds.midY) 

      CGContextStrokePath(line) 
    }  

Однако, мне нужно нарисовать несколько твердых кругов на этой линии и попытаться найти его как точку на графике. Я пытаюсь сделать представление мини-диаграммы на самом деле. Как рисовать круги? С вложенным циклом «for in» или? Есть ли какой-либо официальный API диаграмм от Apple?

ответ

1

UIGraphicsGetCurrentContext() дает вам контекст, в который вы можете сделать несколько вещей. Вызов line - это неправильная идея, поскольку она может содержать несколько строк или кругов, или всевозможные другие вещи.

Подумайте о контексте, как художник, сидя перед пустой холст. Вы даете инструкции художника, например, «нарисуйте красную линию, затем нарисуйте синий круг». Художник следует инструкциям, а потом вы смотрите на холст.

Вот как вы можете нарисовать линию, а затем круг.

let context = UIGraphicsGetCurrentContext() 

    // Tell the context what stroked paths should look like 
    CGContextSetLineWidth(context, 3.0) 
    CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor) 

    // Draw a single line 
    CGContextMoveToPoint(context, 0, self.bounds.midY) 
    CGContextAddLineToPoint(context, self.bounds.width, self.bounds.midY) 
    CGContextStrokePath(context) 

    // Now draw a circle by filling a path. 
    // First, set the fill color: 
    CGContextSetFillColorWithColor(context, UIColor.blueColor().CGColor) 

    // Specify how big the circle is, and where its center is: 
    let circleRadius = CGFloat(5.0) 
    let circleCenter = CGPoint(x: self.bounds.midX, y: self.bounds.midY) 
    // Then add a circle to the context, by specifying the rectangle that surrounds it: 
    let circleRect = CGRect(x: circleCenter.x - circleRadius, 
          y: circleCenter.y - circleRadius, 
          width: circleRadius * 2, 
          height: circleRadius * 2) 
    CGContextAddEllipseInRect(context, circleRect) 

    // And fill that circle: 
    CGContextFillPath(context) 

Если вы хотите, чтобы привлечь больше кругов, но в разных местах, просто позвоните CGContextAddEllipseInRect и CGContextFillPath снова, но с разными значениями для circleRect. В зависимости от того, что вы хотите, может потребоваться цикл for. Это полностью зависит от вас.

Если вы не хотите писать это самостоятельно, есть много доступных библиотек диаграмм сторонних разработчиков, просто выполните поиск. Apple не предоставляет «официальный».