如何从UIBezierPath获取点列表?

我有一个UIBezierPath,我需要从中获取要点列表。


在Qt其中,有一个函数pointAtPercent可以满足我的需求,但找不到等效的函数Objective-C。


有谁知道如何做到这一点?


胡子哥哥
浏览 700回答 3
3回答

阿晨1998

为了找到一个像雨燕解决方案,我在这整个的做法strumbled 后实施了CGPath扩展像这样得到的路径点:extension CGPath {&nbsp; &nbsp; func points() -> [CGPoint]&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var bezierPoints = [CGPoint]()&nbsp; &nbsp; &nbsp; &nbsp; self.forEach({ (element: CGPathElement) in&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let numberOfPoints: Int = {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch element.type {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case .MoveToPoint, .AddLineToPoint: // contains 1 point&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case .AddQuadCurveToPoint: // contains 2 points&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case .AddCurveToPoint: // contains 3 points&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case .CloseSubpath:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for index in 0..<numberOfPoints {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let point = element.points[index]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezierPoints.append(point)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; return bezierPoints&nbsp; &nbsp; }&nbsp; &nbsp; func forEach(@noescape body: @convention(block) (CGPathElement) -> Void) {&nbsp; &nbsp; &nbsp; &nbsp; typealias Body = @convention(block) (CGPathElement) -> Void&nbsp; &nbsp; &nbsp; &nbsp; func callback(info: UnsafeMutablePointer<Void>, element: UnsafePointer<CGPathElement>) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let body = unsafeBitCast(info, Body.self)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; body(element.memory)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; let unsafeBody = unsafeBitCast(body, UnsafeMutablePointer<Void>.self)&nbsp; &nbsp; &nbsp; &nbsp; CGPathApply(self, unsafeBody, callback)&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP