gpt4 book ai didi

xcode - NSBezierPath:如何使用 LineDashStyle 控制线段数量?

转载 作者:行者123 更新时间:2023-11-30 13:28:26 26 4
gpt4 key购买 nike

我想用 NSBezierPath 画一个正方形。正方形的边框必须是连续的,所以我使用 dashStyle,但我无法控制创建的线段数量。

Apple 文档中的解释有点含糊。他们说“当设置线条虚线图案时,您指定每个连续的实心或透明样本的宽度(以磅为单位)”。 所以我想,我需要一种方法来获得弯曲贝塞尔曲线的长度。

有人知道我该如何实现这一目标吗?

最佳答案

extension NSBezierPath {

var lenght:Double {
get{
let flattenedPath = self.bezierPathByFlatteningPath
let segments = flattenedPath.elementCount
var lastPoint:NSPoint = NSZeroPoint
var point:NSPoint = NSZeroPoint
var size :Double = 0

for i in 0...segments - 1 {
let e:NSBezierPathElement = flattenedPath.elementAtIndex(i, associatedPoints: &point)
if e == .MoveToBezierPathElement {
lastPoint = point
} else {
let distance:Double = sqrt(pow(Double(point.x - lastPoint.x) , 2) + pow(Double(point.y - lastPoint.y) , 2))
size += distance
lastPoint = point
}
}

return size
}
}
}

通过这个扩展,我得到了贝塞尔曲线的“近似”长度。之后,一切就变得简单了:

let myPath = NSBezierPath(roundedRect:myRect, xRadius:50, yRadius:50)
let pattern = myPath.length / (numbersOfSegments * 2) // we divide the length to double of segments we need.
myPath.setLineDash([CGFloat(pattern),CGFloat(pattern)], countL:2 , phase: 0)
myPath.stroke()

关于xcode - NSBezierPath:如何使用 LineDashStyle 控制线段数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36857239/

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