修改endcap .round样式,实际上是完全圆形,因为苹果公司令人震惊的不是

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

我刚刚了解到标准苹果.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,那将是神奇的>

enter image description here

我们如何解决这种令人震惊的情况?

enter image description here

enter image description here

enter image description here

您可以看到这里有多远:

enter image description here

[我刚刚了解到,标准的Apple .round端帽让l = CAShapeLayer()l.path = ..只是一条直线,例如50长l.lineWidth = wahtever,说“ 20” l.lineCap = .round实际上不是圆的。...

无法对子帽形状进行“分类”。如果需要其他帽形,则必须手动构造形状的轮廓。

圆帽已经和CGPath(ellipseIn:)创建的圆完全一样。

这是在半径稍大的圆上绘制的圆形线,放大了8倍:

zoomed image

线帽的曲率恰好在圆的水平中心开始。

这里是代码:

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
ios uikit cashapelayer swift5
1个回答
1
投票

无法对子帽形状进行“分类”。如果需要其他帽形,则必须手动构造形状的轮廓。

© www.soinside.com 2019 - 2024. All rights reserved.