作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何以点开始和结束一行,如下图所示:
我可以管理画圆,但我不知道如何在行首和行尾添加点:
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
,您可以将点放置在圆上的任何位置。
关于swift - 如何在 Swift 5.0 中通过 CAShapeLayer 以点开始和结束一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59243082/
我是一名优秀的程序员,十分优秀!