gpt4 book ai didi

ios - 在同一层绘制直线和虚线

转载 作者:行者123 更新时间:2023-11-28 15:54:34 24 4
gpt4 key购买 nike

我只想在线条和虚线内创建折线图。我不知道如何设置层(CAShapeLayer)或路径(UIBezierPath)能够在同一层中创建这两条线。你能给我一些意见吗?非常感谢。

最佳答案

我不确定我是否理解你的问题。您有 CAShapeLayer 或 UIBezierPath,并且希望能够使用同一对象绘制虚线并继续画线? enter image description here

如果您想使用单个 UIBezierPath 获得类似的东西,这是可能的。答案有点长,需要一些解释,所以如果这是你想做的,我会回答你。


编辑后的答案

解决方案是需要一些凌乱的代码,但在某些情况下它工作得很好,所以:

  • 我们将使用 UIBezierPath 来实现那条线。
  • 我们还需要一种方法来获取贝塞尔曲线的长度。为此,存在 UIBezierPath-Length扩大。不幸的是,它是用 Objective-C 编写的,因此,如果您的应用程序没有桥接 header ,是时候创建一个了。 (如果您需要帮助,请告诉我)

现在,因为我们知道任何形状的长度,我们可以继续前进并查看有关 Line Dash 样式的苹果文档。我是一个懒惰的人,所以我不会从文档中复制/粘贴,我更喜欢快照。 (更快)

Line Dash Style

现在剩下要做的就是将其应用于我们的路径。为了更容易解释,我们将举一个例子:

我们想从第一张图片创建线条。线的路径存储在 var graphLine:UIBezierPath 中。我们使用扩展来获取图形线的长度。假设长度是 40。我假设您将使用百分比。这条线必须有 50% 是连续的,其余部分是虚线。所以我们将 40 除以 100。现在对于困难的部分,我们需要创建一个数组,其值将告诉我们的路径如何绘制。

第一个值很简单,我们的结果乘以 50。下一个值,可以使用重复指令添加...最后我们的数组应该是这样的:

[20,2,3,2,3,2,3,2,3]

我知道解释不是最好的。怪我的英语。我希望代码会更有帮助。

var graphLine = UIBezierPath() // init your bezier line properly

let percentValue = graphLine.length() / CGFloat(100)
var pattern:[CGFloat] = []
var currentLength:CGFloat = 0 // Use that to keep track of the added values to the pattern
//add the first line.
Swift.print(graphLine.length())
pattern.append(percentValue * 50)
currentLength = percentValue * 50
while (currentLength < graphLine.length()) {
pattern.append(percentValue) // this is the length of gap
pattern.append(percentValue * 2) // and this is the length of next line
currentLength += percentValue * 3

}
// now we can set the properties for graphLine
graphLine.lineWidth = 3
graphLine.setLineDash(pattern, count: pattern.count, phase: 0)
UIColor.green.set()
graphLine.stroke()

关于ios - 在同一层绘制直线和虚线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41949769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com