Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 不显示图层路径_Ios_Swift_Xcode_Calayer_Uibezierpath - Fatal编程技术网

Ios 不显示图层路径

Ios 不显示图层路径,ios,swift,xcode,calayer,uibezierpath,Ios,Swift,Xcode,Calayer,Uibezierpath,我目前正在制作一个圆形进度条,为此我创建了一个customView。但是,不会显示shapeLayer。我尝试在shapeLayer中添加一个框架以及背景色,但是它只显示了一个矩形,而不是我希望看到的圆形路径。任何关于我做错了什么的想法:思考: import UIKit class CircularProgressBar: UIView { override func draw(_ rect: CGRect) { setupProgressView() }

我目前正在制作一个圆形进度条,为此我创建了一个customView。但是,不会显示shapeLayer。我尝试在shapeLayer中添加一个框架以及背景色,但是它只显示了一个矩形,而不是我希望看到的圆形路径。任何关于我做错了什么的想法:思考:

import UIKit

class CircularProgressBar: UIView {
    override func draw(_ rect: CGRect) {
        setupProgressView()
    }

    private func setupProgressView() {
        let shapeLayer = CAShapeLayer()
        let circularPath = UIBezierPath(arcCenter: center,
                                        radius: 100,
                                        startAngle: 0,
                                        endAngle: 2*CGFloat.pi,
                                        clockwise: true)

        shapeLayer.path = circularPath.cgPath
        shapeLayer.fillColor = UIColor.blue.cgColor
        shapeLayer.strokeColor = UIColor.yellow.cgColor
        shapeLayer.lineWidth = 20

        self.layer.addSublayer(shapeLayer)
    }
}
定形层框架

shapeLayer.frame = bounds
更好的方法是不使用画法

import UIKit
 @IBDesignable
 class CircularProgressBar: UIView {

    private lazy var shapeLayer: CAShapeLayer = {
        let shape = CAShapeLayer()
        shape.fillColor = UIColor.blue.cgColor
        shape.strokeColor = UIColor.yellow.cgColor
        shape.lineWidth = 20
        return shape
    }()

    override init(frame: CGRect) {

        super.init(frame: frame)
        addLayers()
    }

    required init?(coder: NSCoder) {

        super.init(coder: coder)
        addLayers()
    }

    private func addLayers() {
        layer.addSublayer(shapeLayer)
    }


    override func layoutSubviews() {
        updatePath()
    }


    private func updatePath() {

        let circularPath = UIBezierPath(arcCenter: CGPoint(x: bounds.midX, y: bounds.midY),
                                        radius: min(bounds.midX, bounds.midY) - shapeLayer.lineWidth/2,
                                        startAngle: 0,
                                        endAngle: 2*CGFloat.pi,
                                        clockwise: true)
        shapeLayer.frame = bounds
        shapeLayer.path = circularPath.cgPath
    }
}