// // SegmentedProgressBar.swift // SegmentedProgressBar // // Created by Dylan Marriott on 04.03.17. // Copyright © 2017 Dylan Marriott. All rights reserved. // import Foundation import UIKit protocol SegmentedProgressBarDelegate: class { func segmentedProgressBarChangedIndex(index: Int) func segmentedProgressBarFinished() } class SegmentedProgressBar: UIView { weak var delegate: SegmentedProgressBarDelegate? var topColor = UIColor.gray { didSet { self.updateColors() } } var bottomColor = UIColor.gray.withAlphaComponent(0.25) { didSet { self.updateColors() } } var padding: CGFloat = 2.0 var isPaused: Bool = false { didSet { if isPaused { for segment in segments { let layer = segment.topSegmentView.layer let pausedTime = layer.convertTime(CACurrentMediaTime(), from: nil) layer.speed = 0.0 layer.timeOffset = pausedTime } } else { let segment = segments[currentAnimationIndex] let layer = segment.topSegmentView.layer let pausedTime = layer.timeOffset layer.speed = 1.0 layer.timeOffset = 0.0 layer.beginTime = 0.0 let timeSincePause = layer.convertTime(CACurrentMediaTime(), from: nil) - pausedTime layer.beginTime = timeSincePause } } } private var segments = [Segment]() private let duration: TimeInterval private var hasDoneLayout = false // hacky way to prevent layouting again private var currentAnimationIndex = 0 init(numberOfSegments: Int, duration: TimeInterval = 5.0) { self.duration = duration super.init(frame: CGRect.zero) for _ in 0..