Swift 5.0 如何通过 CAShapeLayer 以点开始和结束一行
How to start and end a line with dot through CAShapeLayer in Swift 5.0
如何用点开始和结束一行,如下图所示:
我可以画圈,但我不知道如何在行首和行尾添加点:
let arcCenter = CGPoint(x: vwCircle.frame.width / 2,
y: vwCircle.frame.height / 2)
let circlePath = UIBezierPath(arcCenter: arcCenter,
radius: 15,
startAngle: 0,
endAngle: CGFloat(Double.pi),
clockwise: true)
shapeLayer = CAShapeLayer()
shapeLayer!.path = circlePath.cgPath
//change the fill color
shapeLayer!.fillColor = UIColor.clear.cgColor
//you can change the stroke color
shapeLayer!.strokeColor = UIColor.red.cgColor
//you can change the line width
shapeLayer!.lineWidth = 3.0
vwCircle.layer.addSublayer(shapeLayer!)
最简单的方法(因此也是我的方法)就是使用更多的形状图层。对于每个点,制作一个形状层,其形状是中心的一个点。然后添加该层并将其旋转变换到您希望它移动的角度,然后平移变换到圆的半径。
所以,那幅画实际上是三个形状层:外圈、一个点和另一个点。顶部的点是这样创建的:
let angle : CGFloat = .pi * 2 * 3 / 4
// ...
let lay = CAShapeLayer()
lay.frame = circleLayer.bounds
lay.strokeColor = UIColor.black.cgColor
lay.fillColor = UIColor.black.cgColor
let dot = UIBezierPath(
arcCenter: CGPoint(x: circleLayer.bounds.midX, y: circleLayer.bounds.midY),
radius: 3, startAngle: 0, endAngle: .pi*2.0, clockwise: true)
lay.path = dot.cgPath
circleLayer.addSublayer(lay)
// and now add the transform
lay.transform = CATransform3DMakeRotation(angle, 0, 0, 1)
lay.transform = CATransform3DTranslate(lay.transform, circleRadius, 0, 0)
通过更改值 .pi * 2 * 3 / 4
,您可以将圆点放在圆上任何您喜欢的位置。
如何用点开始和结束一行,如下图所示:
我可以画圈,但我不知道如何在行首和行尾添加点:
let arcCenter = CGPoint(x: vwCircle.frame.width / 2,
y: vwCircle.frame.height / 2)
let circlePath = UIBezierPath(arcCenter: arcCenter,
radius: 15,
startAngle: 0,
endAngle: CGFloat(Double.pi),
clockwise: true)
shapeLayer = CAShapeLayer()
shapeLayer!.path = circlePath.cgPath
//change the fill color
shapeLayer!.fillColor = UIColor.clear.cgColor
//you can change the stroke color
shapeLayer!.strokeColor = UIColor.red.cgColor
//you can change the line width
shapeLayer!.lineWidth = 3.0
vwCircle.layer.addSublayer(shapeLayer!)
最简单的方法(因此也是我的方法)就是使用更多的形状图层。对于每个点,制作一个形状层,其形状是中心的一个点。然后添加该层并将其旋转变换到您希望它移动的角度,然后平移变换到圆的半径。
所以,那幅画实际上是三个形状层:外圈、一个点和另一个点。顶部的点是这样创建的:
let angle : CGFloat = .pi * 2 * 3 / 4
// ...
let lay = CAShapeLayer()
lay.frame = circleLayer.bounds
lay.strokeColor = UIColor.black.cgColor
lay.fillColor = UIColor.black.cgColor
let dot = UIBezierPath(
arcCenter: CGPoint(x: circleLayer.bounds.midX, y: circleLayer.bounds.midY),
radius: 3, startAngle: 0, endAngle: .pi*2.0, clockwise: true)
lay.path = dot.cgPath
circleLayer.addSublayer(lay)
// and now add the transform
lay.transform = CATransform3DMakeRotation(angle, 0, 0, 1)
lay.transform = CATransform3DTranslate(lay.transform, circleRadius, 0, 0)
通过更改值 .pi * 2 * 3 / 4
,您可以将圆点放在圆上任何您喜欢的位置。