无法对子帽形状进行“分类”。如果需要其他帽形,则必须手动构造形状的轮廓。
我刚刚了解到标准苹果.round
端盖
let l = CAShapeLayer()
l.path = .. just a straight line, say 50 long
l.lineWidth = wahtever, say "20"
l.lineCap = .round
实际上不是圆形的。>。
仔细一看,就会看到。
更像是“屁股”。
因此,对于例如20的线宽,端盖的高度约为7或8
-对于“精确的半圆”,它不是10,正如您所期望的。 >上限。[我很欣赏我可以建立自己的“线”(即“外部”或线)并填充它,然后我可以完全按照自己的意愿设置端盖。
但是有某种方法可能以某种方式将“ endcap”子类化吗?!
如果可以将“线条/厚度”隐喻保留在形状图层中,而不是仔细绘制线条轮廓,则容易得多。
如果你说= .myHappyEndcapMode
,那将是神奇的>
我们如何解决这种令人震惊的情况?
您可以看到这里有多远:
[我刚刚了解到,标准的Apple .round端帽让l = CAShapeLayer()l.path = ..只是一条直线,例如50长l.lineWidth = wahtever,说“ 20” l.lineCap = .round实际上不是圆的。...
无法对子帽形状进行“分类”。如果需要其他帽形,则必须手动构造形状的轮廓。
圆帽已经和CGPath(ellipseIn:)
创建的圆完全一样。
这是在半径稍大的圆上绘制的圆形线,放大了8倍:
线帽的曲率恰好在圆的水平中心开始。
这里是代码:
import UIKit
import PlaygroundSupport
let lineWidth: CGFloat = 20
let circleRadius = lineWidth / 2 + 1
let lineLayer = CAShapeLayer()
lineLayer.position = .init(x: 30, y: 30)
let path = CGMutablePath()
path.move(to: .zero)
path.addLine(to: .init(x: 30, y: 0))
lineLayer.path = path
lineLayer.lineWidth = lineWidth
lineLayer.lineCap = .round
lineLayer.strokeColor = UIColor.gray.cgColor
lineLayer.fillColor = nil
let circleLayer = CAShapeLayer()
circleLayer.position = lineLayer.position
circleLayer.path = CGPath(ellipseIn: CGRect.zero.insetBy(dx: -circleRadius, dy: -circleRadius), transform: nil)
circleLayer.fillColor = UIColor.blue.cgColor
let view = UIView(frame: .init(x: 0, y: 0, width: 100, height: 80))
view.layer.backgroundColor = UIColor.white.cgColor
view.layer.addSublayer(circleLayer)
view.layer.addSublayer(lineLayer)
PlaygroundPage.current.liveView = view
无法对子帽形状进行“分类”。如果需要其他帽形,则必须手动构造形状的轮廓。