2012-12-06 87 views
2

有任何解決方法知道其中CGpath(使用座標的陣列創建)閉合Core-Graphics(iPhone) - 我們知道CGPath是否已關閉?

我無法找到任何合適的方法在標題CGPath

我希望跟蹤由用戶追蹤。如果它的一個閉環的路徑,然後我希望提取該部分從上下文。就像屏蔽或剪輯上下文,但它應該是用戶跟蹤剪輯。

謝謝!

+0

[CGPathContainsPoint](https://developer.apple.com/library/ios/documentation/graphicsimaging /Reference/CGPath/Reference/reference.html#//apple_ref/c/func/CGPathContainsPoint)可以幫助你! ,[A示例項目,可以幫助你(https://github.com/ole/CGPathHitTesting)和[一個關於它的討論(http://oleb.net/blog/2012/02/cgpath-hit-testing /) – Bala

+0

親愛的巴拉,我很欣賞你的想法,但那不是我正在尋找的東西。這個鏈接也很有用,但它並沒有達到目的。無論如何感謝您的時間。 –

+0

如果你更新和解釋你的問題更具體的關於你在找什麼,它可能會更有幫助..? – Bala

回答

0

爲防萬一你在最近4年半的時間裏停滯不前,這裏是如何在Swift 3中做到這一點。我借用沉重this answer。我真的只是加了isClosed()函數。

extension CGPath { 

func isClosed() -> Bool { 
    var isClosed = false 
    forEach { element in 
     if element.type == .closeSubpath { isClosed = true } 
    } 
    return isClosed 
} 

func forEach(body: @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)) 
} 
} 

並假設pathCGPathCGMutablePath,這裏是你如何使用它:

path.isClosed() 
相關問題