在 CAShapeLayer 之上维护 UIBezierPath

问题描述 投票:0回答:0

我在

CAShapeLayer
上添加了一个圆圈,并在
UIBeizerPath
上添加了一条线。我想保持线的位置在圆之上。基本上在
drawRect
中,物品的位置会一个接一个的保持。所以,我先调用
drawCircle()
并调用
drawLine()
期望线必须在圆的顶部。这是我的代码。

class DrawView: UIView {
    override func draw(_ rect: CGRect) {
        drawCircle()
        drawLine()
    }
    
    private func drawCircle() {
        if let sublayers = layer.sublayers {
            for layer in sublayers where layer.name == "Circle" {
                layer.removeFromSuperlayer()
            }
        }
        
        let circlePath = UIBezierPath(arcCenter: CGPoint(x: bounds.midX, y: 400),
                                      radius: 20.0,
                                      startAngle: 0,
                                      endAngle: CGFloat(Double.pi * 2),
                                      clockwise: true)
        let shapeLayer = CAShapeLayer()
        shapeLayer.name = "Circle"
        shapeLayer.path = circlePath.cgPath
        shapeLayer.fillColor = UIColor.clear.cgColor
        shapeLayer.strokeColor = UIColor.red.cgColor
        shapeLayer.lineWidth = 3.0
            
        layer.addSublayer(shapeLayer)
    }
    
    private func drawLine() {
        let path = UIBezierPath()
        
        path.move(to: CGPoint(x:bounds.midX, y:0))
        path.addLine(to: CGPoint(x: bounds.midX, y: 400))
        path.close()
        
        UIColor.blue.set()
        path.lineWidth = 20.0
        path.stroke()
    }
}

下面是结果

但是,将线添加到另一个

CAShapeLayer
给出了预期的结果,将线添加到圆的顶部。如何在不将线添加到
CAShapeLayer
.

的情况下将线放在圆的顶部
ios swift uibezierpath drawrect cashapelayer
© www.soinside.com 2019 - 2024. All rights reserved.