Как это сделать?
RexHunt
#2
Не хочу Вас обижать, но мне кажется Вы слишком торопитесь с таким сложным функционалом, судя по тому, что Вы спрашивали “Как вызывать функцию из функции”.
Это делается с помощью Core Graphic. Это все рисуется/вычисляется в коде.
Смотреть в сторону UIBezierPath.
RexHunt
#3
Если честно, то для человека с опытом в рисовании графических элементов это будет просто.
У меня опыта в этом не так много, но я бы за пару часов это сделал.
По сути тут хватит 4 раза вызвать UIBezierPath:
- Основной серый круг
- Дуга с самым болшим показателем закраски
- Дуга со средним показателем
- Дуга с меньшим показателем
Останется лишь найти информацию, как закруглить концы этих 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()
}