класс работает неправильно после преобразования Swift 3

мой класс (UIView) не работает после преобразования Xcode 8.1 swift 3. Я понятия не имею, что здесь не так, этот класс представляет собой представление прогресса, которое выглядит нормально после преобразования, но мой прогресс не виден, вот мой класс после преобразования:

class CircularLoaderView: UIView, CAAnimationDelegate {
    let circlePathLayer = CAShapeLayer()
    let circleRadius: CGFloat = 60.0
    let innerCirclePathLayer = CAShapeLayer()
    let innerCircleRadius: CGFloat = 60.0
    override init(frame: CGRect) {
        super.init(frame: frame)
        configure()
        innerConfigure()
    }
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        configure()
        innerConfigure()
    }
    func configure() {
        circlePathLayer.frame = bounds
        circlePathLayer.lineWidth = 10
        circlePathLayer.fillColor = UIColor.clear.cgColor
        circlePathLayer.strokeColor = UIColor.darkGray.cgColor
        layer.addSublayer(circlePathLayer)
        backgroundColor = UIColor.clear
        progress = 0
    }
    func innerConfigure() {
        innerCirclePathLayer.frame = bounds
        innerCirclePathLayer.lineWidth = 10
        innerCirclePathLayer.fillColor = UIColor.clear.cgColor
        innerCirclePathLayer.strokeColor = UIColor(red: 100, green: 60, blue: 70, alpha: 0.2).cgColor
        layer.addSublayer(innerCirclePathLayer)
        backgroundColor = UIColor.clear
    }
    func innerCircleFrame() -> CGRect {
        var circleFrame = CGRect(x: 0, y: 0, width: 2*innerCircleRadius, height: 2*innerCircleRadius)
        circleFrame.origin.x = innerCirclePathLayer.bounds.midX - circleFrame.midX
        circleFrame.origin.y = innerCirclePathLayer.bounds.midY - circleFrame.midY
        return circleFrame
    }
    func innerCirclePath() -> UIBezierPath {
        return UIBezierPath(ovalIn: innerCircleFrame())
    }
    func circleFrame() -> CGRect {
        var circleFrame = CGRect(x: 0, y: 0, width: 2*circleRadius, height: 2*circleRadius)
        circleFrame.origin.x = circlePathLayer.bounds.midX - circleFrame.midX
        circleFrame.origin.y = circlePathLayer.bounds.midY - circleFrame.midY
        return circleFrame
    }
    func circlePath() -> UIBezierPath {
        return UIBezierPath(ovalIn: circleFrame())
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        circlePathLayer.frame = bounds
        circlePathLayer.path = circlePath().cgPath
        innerCirclePathLayer.frame = bounds
        innerCirclePathLayer.path = innerCirclePath().cgPath
    }
    var progress: CGFloat {
        get {
            return circlePathLayer.strokeEnd
        }
        set {
            if (newValue > 1) {
                circlePathLayer.strokeEnd = 1
            } else if (newValue < 0) {
                circlePathLayer.strokeEnd = 0
            } else {
                circlePathLayer.strokeEnd = newValue
            }
        }
    }
    func reveal() {
        // 1
        backgroundColor = UIColor.clear
        progress = 1
        // 2
        circlePathLayer.removeAnimation(forKey: "strokeEnd")
        // 3
        circlePathLayer.removeFromSuperlayer()
        superview?.layer.mask = circlePathLayer

        // 1
        let center = CGPoint(x: bounds.midX, y: bounds.midY)
        let finalRadius = sqrt((center.x*center.x) + (center.y*center.y))
        let radiusInset = finalRadius - circleRadius
        let outerRect = circleFrame().insetBy(dx: -radiusInset, dy: -radiusInset)
        let toPath = UIBezierPath(ovalIn: outerRect).cgPath
        // 2
        let fromPath = circlePathLayer.path
        let fromLineWidth = circlePathLayer.lineWidth
        // 3
        CATransaction.begin()
        CATransaction.setValue(kCFBooleanTrue, forKey: kCATransactionDisableActions)
        circlePathLayer.lineWidth = 2*finalRadius
        circlePathLayer.path = toPath
        CATransaction.commit()
        // 4
        let lineWidthAnimation = CABasicAnimation(keyPath: "lineWidth")
        lineWidthAnimation.fromValue = fromLineWidth
        lineWidthAnimation.toValue = 2*finalRadius
        let pathAnimation = CABasicAnimation(keyPath: "path")
        pathAnimation.fromValue = fromPath
        pathAnimation.toValue = toPath
        // 5
        let groupAnimation = CAAnimationGroup()
        groupAnimation.duration = 1
        groupAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        groupAnimation.animations = [pathAnimation, lineWidthAnimation]
        groupAnimation.delegate = self
        circlePathLayer.add(groupAnimation, forKey: "strokeWidth")
    }
     func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
        superview?.layer.mask = nil
    }
}

вот как я устанавливаю прогресс:

cell.loaderView?.progress = CGFloat(receivedSize)/CGFloat(expectedSize)

по-прежнему не показывает никакого прогресса, кто-нибудь знает, что здесь не так, тогда дайте мне знать


person remy boys    schedule 19.11.2016    source источник
comment
не имеет отношения к вашему вопросу, но вы можете упростить свой процесс установки вычисляемых свойств circlePathLayer.strokeEnd = newValue > 1 ? 1 : newValue < 0 ? 0 : newValue   -  person Leo Dabus    schedule 19.11.2016
comment
@LeoDabus хорошо, спасибо, я обновлю свой код   -  person remy boys    schedule 19.11.2016
comment
Всегда пожалуйста   -  person Leo Dabus    schedule 19.11.2016


Ответы (1)


Вы не указали, что именно не работает, но когда я тестирую ваш код, он показывает прогресс, единственное, что не работает, это то, что он не показывает мне innerCirclePathLayer, потому что вы не разделили свой RGB цвет на 255, потому что init(red:green:blue:alpha:) принимает значения от 0.0 до 1.0 и значения выше 1.0 интерпретируются как 1.0. Итак, попробуйте один раз разделить RGB на 255.

innerCirclePathLayer.strokeColor = UIColor(red: 100/255.0, green: 60/255.0, blue: 70/255.0, alpha: 0.2).cgColor
person Nirav D    schedule 19.11.2016
comment
@LeoDabus Я уже писал, что, думаю, проблема может быть в этом, а не на 100%. - person Nirav D; 19.11.2016
comment
NiravD вот и все, чувак, спасибо за помощь, ценю твои усилия. - person remy boys; 19.11.2016