我创建了一个UIBezierPath,但我不知道如何访问它的起点.我试过这样做:
let startPoint = path.currentPoint
currentPoint属性给出了最后一点,而不是起点.我需要起点的原因是因为我想在路径的起点放置一个图像.
有任何想法吗?
解决方法
您需要下拉到CGPath并使用CGPathApply来遍历元素.你只想要第一个,但你必须全部看看它们.
我假设你的道路格式正确,并以“移动”开始.对于UIBezierPath来说应该总是如此(我不知道有什么方法可以使它不成真.)
你需要一些来自rob mayoff的CGPath.forEach
的帮助,这是非常棘手的,但有了它,它非常简单:
// rob mayoff's CGPath.foreach extension CGPath { func forEach(@noescape body: @convention(block) (CGpathelement) -> Void) { typealias Body = @convention(block) (CGpathelement) -> Void func callback(info: UnsafeMutablePointer<Void>,element: UnsafePointer<CGpathelement>) { let body = unsafeBitCast(info,Body.self) body(element.memory) } let unsafeBody = unsafeBitCast(body,UnsafeMutablePointer<Void>.self) CGPathApply(self,unsafeBody,callback) } } // Finds the first point in a path extension UIBezierPath { func firstPoint() -> CGPoint? { var firstPoint: CGPoint? = nil self.CGPath.forEach { element in // Just want the first one,but we have to look at everything guard firstPoint == nil else { return } assert(element.type == .MovetoPoint,"Expected the first point to be a move") firstPoint = element.points.memory } return firstPoint } }
在Swift 3中,它基本相同:
// rob mayoff's CGPath.foreach extension CGPath { func forEach( body: @convention(block) (CGpathelement) -> Void) { typealias Body = @convention(block) (CGpathelement) -> Void func callback(info: UnsafeMutableRawPointer?,to: Body.self) body(element.pointee) } let unsafeBody = unsafeBitCast(body,to: UnsafeMutableRawPointer.self) self.apply(info: unsafeBody,function: callback) } } // Finds the first point in a path extension UIBezierPath { func firstPoint() -> CGPoint? { var firstPoint: CGPoint? = nil self.cgPath.forEach { element in // Just want the first one,but we have to look at everything guard firstPoint == nil else { return } assert(element.type == .movetoPoint,"Expected the first point to be a move") firstPoint = element.points.pointee } return firstPoint } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。