рисование круга с использованием безье пути Swift - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь нарисовать круг, который находится в моем классе ячеек пользовательского табличного представления на основе дат. Например. У меня есть два объекта даты; дата1 и дата2 соответственно. Чем ближе дата1 становится ближе к дате2, круг должен стать более завершенным, чтобы быть полным кругом. Когда количество дней равно 0, должен быть полный круг и т. Д.

Это то, что у меня есть на данный момент:

let startAngle = CGFloat(-Double.pi/2)
    let endAngle = CGFloat(-Double.pi/2 + Double.pi * Double(2) * Double(components.day!) * 0.1)

    let circlePath = UIBezierPath(arcCenter: CGPoint(x: 80,y: 80), radius: CGFloat(60), startAngle:startAngle , endAngle:endAngle, clockwise: true)

    let shapeLayer = CAShapeLayer()
    shapeLayer.path = circlePath.cgPath

    var colour = UIColor.green.cgColor

    //change the fill color
    shapeLayer.fillColor = UIColor.clear.cgColor
    //you can change the stroke color
    shapeLayer.strokeColor = colour
    //you can change the line width
    shapeLayer.lineWidth = 10.0

    cell.progressView.layer.addSublayer(shapeLayer)

components.day! - это количество дней между двумя датами. Но нарисованный круг не соотносится с количеством дней. Я предполагаю, что неправильно понял мои углы, но не уверен, почему

1 Ответ

0 голосов
/ 11 мая 2018

У вас есть требование, что если разница дат (components.day) составляет 20 или более, кружок должен быть пустым. Если разница равна 0, то круг должен быть завершен. Итак, первое, что вам нужно сделать, это вычислить процентное соотношение на основе components.day.

let percentFull = 1 - Double(min(components.day!, 20)) / 20

Тогда вы можете рассчитать углы:

let startAngle = CGFloat(-Double.pi / 2) // top of circle
let endAngle = startAngle + 2 * Double.pi * percentFull

let circlePath = UIBezierPath(arcCenter: CGPoint(x: 80, y: 80), radius: 60, startAngle: startAngle, endAngle: endAngle, clockwise: true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...