[英]iPhone - copying a UIBezierPath to a CGPath and rendering as the original
我創建了一個復雜的 UIBezierPath,它由幾個路徑段組成,實線、虛線、線、colors、弧線等。所以我有了這個,現在我想將它渲染到 CGContext。
因此,我將其轉換為 CGPathReference 使用
CGPathRef cgPath = CGPathCreateCopy(aBezierPath.CGPath);
問題是這樣的:理論上,如果我想在一個CGContext上畫一條路徑,我必須為每個需要不同的段定義筆觸寬度、顏色、線條樣式、混合模式等,但是UIBezierPath我已經創建包含所有這些信息。
所以,我想知道是否有一種方法可以“標記”CGPath,因為它在 CGContext 上,所以它會被標記所有原始信息?
謝謝。
博士,你是對的:這非常令人困惑!
但我認為 Tom 是正確的,只需使用 [aBezierPath stroke]。
所以,它會是這樣的:
REF是您構建的 (CGContextRef)。
YOURBEZIERPATH是一個 (UIBezierPath*)。
不可避免地,您必須處理“顛倒繪圖”問題,因此:
UIGraphicsPushContext(REF);
CGContextSaveGState(REF);
CGContextTranslateCTM(REF, 0, the height*);
CGContextScaleCTM(REF, 1.0, -1.0);
[YOURBEZIERPATH stroke];
CGContextRestoreGState(REF);
UIGraphicsPopContext();
就是這樣了。
在下面回復您的評論:我有一組 UIBezierPaths。 每個貝塞爾曲線都有自己的風格和顏色。
這有幫助嗎? ...用 for 循環替換一個“中風”調用:
UIGraphicsPushContext(REF);
CGContextSaveGState(REF);
CGContextTranslateCTM(REF, 0, the height*);
CGContextScaleCTM(REF, 1.0, -1.0);
for each of YOURBEZIERPATH in your array...
{
CGContextSaveGState(REF);
[YOURBEZIERPATH stroke];
CGContextRestoreGState(REF);
}
CGContextRestoreGState(REF);
UIGraphicsPopContext();
您實際上不需要費心使用 aBezierPath.CGPath 或其副本。
你又是對的,UI 和 CG 的兩個世界非常令人困惑!
*高度:通常類似於 self.frame.size.height。 我只是為將來尋找通用示例代碼的人提供了這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.