Как это сделать?

ios

#1

33


#2

Не хочу Вас обижать, но мне кажется Вы слишком торопитесь с таким сложным функционалом, судя по тому, что Вы спрашивали “Как вызывать функцию из функции”.

Это делается с помощью Core Graphic. Это все рисуется/вычисляется в коде.
Смотреть в сторону UIBezierPath.


#3

Если честно, то для человека с опытом в рисовании графических элементов это будет просто.
У меня опыта в этом не так много, но я бы за пару часов это сделал.
По сути тут хватит 4 раза вызвать UIBezierPath:

  1. Основной серый круг
  2. Дуга с самым болшим показателем закраски
  3. Дуга со средним показателем
  4. Дуга с меньшим показателем

Останется лишь найти информацию, как закруглить концы этих 3-х дуг. Я не пробовал так, но в интернете видел такую информацию.

Так я рисовал дугу:

private let fullCircle = CGFloat(Double.pi) * 2.0
private var zeroPoint: CGFloat {
        return -0.25 * fullCircle
    }
// from 0 to 1
private func getArcPosition(start: CGFloat, end: CGFloat) -> (start: CGFloat, end: CGFloat) {
        let _start: CGFloat = start * fullCircle + zeroPoint
        let _end: CGFloat = end * fullCircle + zeroPoint
        return (_start, _end)
    }
func drawArc() {
        UIColor.red.set()
        let arcPosition = getArcPosition(start: 0, end: 0.6)
        arc = UIBezierPath(arcCenter: viewCenter, radius: radius, startAngle: arcPosition.start, endAngle: arcPosition.end, clockwise: true)
        arc.lineWidth = 1
        arc.stroke()
   }

#4

Пожалуйста.


#5

Я его как раз час назад нашел. Спасибо!!!