2015-08-04 4 views
1

Я хотел бы создать круговой прогресс с срезами, где каждый срез представляет собой дугу.Нарисуйте круговой сегмент в SWIFT

я на основе моего кода на этот ответ: Draw segments from a circle or donut

Но я не знаю, как скопировать его и повернуть его в 10 раз. И я хотел бы пометить его после переменной прогресса (в процентах).

EDIT: Я хотел бы что-то вроде этого

enter image description here

Любая помощь, пожалуйста,

С уважением

+0

Вы посмотрели на этот учебник? http://www.raywenderlich.com/94302/implement-circular-image-loader-animation-cashapelayer – Acoop

+0

да. Но я не хочу этого делать. Я хочу что-то вроде этого: http://blog.scottlogic.com/archive/2011/02/SegmentedProgress.png – Jojo

+0

проверить это: http://stackoverflow.com/questions/30554632/masking-circle-segments-in -swift/30556058 # 30556058 –

ответ

5

Вы можете использовать круговой путь и установить strokeStart и StrokeEnd. Что-то вроде этого:

let circlePath = UIBezierPath(ovalInRect: CGRect(x: 200, y: 200, width: 150, height: 150)) 
var segments: [CAShapeLayer] = [] 
let segmentAngle: CGFloat = (360 * 0.125)/360 

for var i = 0; i < 8; i++ { 
    let circleLayer = CAShapeLayer() 
    circleLayer.path = circlePath.CGPath 

    // start angle is number of segments * the segment angle 
    circleLayer.strokeStart = segmentAngle * CGFloat(i) 

    // end angle is the start plus one segment, minus a little to make a gap 
    // you'll have to play with this value to get it to look right at the size you need 
    let gapSize: CGFloat = 0.008 
    circleLayer.strokeEnd = circleLayer.strokeStart + segmentAngle - gapSize 

    circleLayer.lineWidth = 10 
    circleLayer.strokeColor = UIColor(red:0, green:0.004, blue:0.549, alpha:1).CGColor 
    circleLayer.fillColor = UIColor.clearColor().CGColor 

    // add the segment to the segments array and to the view 
    segments.insert(circleLayer, atIndex: i) 
    view.layer.addSublayer(segments[i]) 
} 
+0

Отлично! Благодаря !! Еще одна вещь, как вы можете покрасить сегменты из скорости хода (от 0% до 100%)? От серого до синего цвета. Спасибо за помощь !! – Jojo

+0

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

+0

Отличный !! Оно работает. Просто нужно повернуть слой beacause, когда первый сегмент начинается с -M_PI вместо -M_PI/2 – Jojo