Ios 像所有像素(x,y)一样使用UIBezierPath获取每个cgpoint(x,y)坐标
我只是使用UIBezierPath绘制路径,我想得到UIBezierPath下的每个CG点。 我尝试使用以下代码Ios 像所有像素(x,y)一样使用UIBezierPath获取每个cgpoint(x,y)坐标,ios,uibezierpath,cashapelayer,Ios,Uibezierpath,Cashapelayer,我只是使用UIBezierPath绘制路径,我想得到UIBezierPath下的每个CG点。 我尝试使用以下代码 func forEach( body: [![enter image description here][1]][1]@escaping @convention(block) (CGPathElement) -> Void) { typealias Body = @convention(block) (CGPathElement) -> Void let
func forEach( body: [![enter image description here][1]][1]@escaping @convention(block) (CGPathElement) -> Void) {
typealias Body = @convention(block) (CGPathElement) -> Void
let callback: @convention(c) (UnsafeMutableRawPointer, UnsafePointer<CGPathElement>) -> Void = { (info, element) in
let body = unsafeBitCast(info, to: Body.self)
body(element.pointee)
}
//print(MemoryLayout.size(ofValue: body))
let unsafeBody = unsafeBitCast(body, to: UnsafeMutableRawPointer.self)
self.apply(info: unsafeBody, function: unsafeBitCast(callback, to: CGPathApplierFunction.self))
}
func getPathElementsPoints() -> [CGPoint] {
var arrayPoints : [CGPoint]! = [CGPoint]()
self.forEach { element in
switch (element.type) {
case CGPathElementType.moveToPoint:
arrayPoints.append(element.points[0])
case .addLineToPoint:
arrayPoints.append(element.points[0])
case .addQuadCurveToPoint:
arrayPoints.append(element.points[0])
arrayPoints.append(element.points[1])
case .addCurveToPoint:
arrayPoints.append(element.points[0])
arrayPoints.append(element.points[1])
arrayPoints.append(element.points[2])
default: break
}
}
return arrayPoints
}
func getPathElementsPointsAndTypes() -> ([CGPoint],[CGPathElementType]) {
var arrayPoints : [CGPoint]! = [CGPoint]()
var arrayTypes : [CGPathElementType]! = [CGPathElementType]()
self.forEach { element in
switch (element.type) {
case CGPathElementType.moveToPoint:
arrayPoints.append(element.points[0])
arrayTypes.append(element.type)
case .addLineToPoint:
arrayPoints.append(element.points[0])
arrayTypes.append(element.type)
case .addQuadCurveToPoint:
arrayPoints.append(element.points[0])
arrayPoints.append(element.points[1])
arrayTypes.append(element.type)
arrayTypes.append(element.type)
case .addCurveToPoint:
arrayPoints.append(element.points[0])
arrayPoints.append(element.points[1])
arrayPoints.append(element.points[2])
arrayTypes.append(element.type)
arrayTypes.append(element.type)
arrayTypes.append(element.type)
default: break
}
}
return (arrayPoints,arrayTypes)
}
func-forEach(正文:[![在此处输入图像描述][1][1]@escaping@convention(block)(CGPathElement)->Void){
typealias Body=@约定(块)(CGPathElement)->Void
让回调:@convention(c)(UnsafeMutableRawPointer,UnsafePointer)->Void={(info,element)in
让body=unsafeBitCast(信息,收件人:body.self)
主体(element.pointee)
}
//打印(MemoryLayout.size(of值:正文))
让unsafeBody=unsafeBitCast(body,to:UnsafeMutableRawPointer.self)
apply(信息:unsafeBody,函数:unsafeBitCast(回调,到:cgpathappierfunction.self))
}
func getPathElementsPoints()->[CGPoint]{
变量数组点:[CGPoint]!=[CGPoint]()
中的self.forEach{element
开关(元件类型){
案例CGPathElementType.moveToPoint:
arrayPoints.append(元素点[0])
case.addLineToPoint:
arrayPoints.append(元素点[0])
case.addQuadCurveToPoint:
arrayPoints.append(元素点[0])
arrayPoints.append(element.points[1])
case.addCurveToPoint:
arrayPoints.append(元素点[0])
arrayPoints.append(element.points[1])
arrayPoints.append(element.points[2])
默认值:中断
}
}
返回数组点
}
func getPathElementsPointsAndTypes()->([CGPoint],[CGPathElementType]){
变量数组点:[CGPoint]!=[CGPoint]()
var arrayTypes:[CGPathElementType]!=[CGPathElementType]()
中的self.forEach{element
开关(元件类型){
案例CGPathElementType.moveToPoint:
arrayPoints.append(元素点[0])
arrayTypes.append(element.type)
case.addLineToPoint:
arrayPoints.append(元素点[0])
arrayTypes.append(element.type)
case.addQuadCurveToPoint:
arrayPoints.append(元素点[0])
arrayPoints.append(element.points[1])
arrayTypes.append(element.type)
arrayTypes.append(element.type)
case.addCurveToPoint:
arrayPoints.append(元素点[0])
arrayPoints.append(element.points[1])
arrayPoints.append(element.points[2])
arrayTypes.append(element.type)
arrayTypes.append(element.type)
arrayTypes.append(element.type)
默认值:中断
}
}
返回(arrayPoints、arrayTypes)
}
我可以用上面的代码和CGPoint一起获得积分,但它只给出了那个控制点
有人建议我怎样才能得到所有的分数吗
谢谢一种简单的(可能不准确,取决于用例)方法是:
let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
let bezierPath = UIBezierPath(ovalIn: rect.insetBy(dx: 10, dy: 10))
let pathBounds = bezierPath.bounds
let minX = Int(pathBounds.minX)
let maxX = Int(pathBounds.maxX)
let minY = Int(pathBounds.minY)
let maxY = Int(pathBounds.maxY)
var allPoints: [CGPoint] = []
var pathPoints: [CGPoint] = []
for x in minX...maxX {
for y in minY...maxY {
let point = CGPoint(x: CGFloat(x), y: CGFloat(y))
allPoints.append(point)
if bezierPath.contains(point) {
pathPoints.append(point)
}
}
}
print("All Points: \(allPoints.count)")
print("Path Points: \(pathPoints.count)")
对我来说,这张照片
All Points: 6561
Path Points: 5025
希望这有帮助。感谢识别(x,y)坐标,但这里我只得到一些点,比如我有一个速度曲线图,速度曲线图有一个原始路径曲线,所以路径曲线我想要(x,y)在UIBezierPath下的坐标你能让我知道路径坐标在曲线的UIBezierPath下吗,只需要曲线x,y坐标在这个例子中,我得到的值像x:0.0,y:183.0,再次是x:1.0,y:182.0,像这样,但我想要用浮点也像24.75,56.25等等。。。