簡體   English   中英

iPhone - 將 UIBezierPath 復制到 CGPath 並呈現為原始

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM