2012-01-29 489 views
1

我基本上需要一種以圖形方式創建用於導入到我的應用的路徑的方法,以便我可以在CAKeyframeAnimation對象中將它們用作動畫路徑。我也有點時間推出我自己的獨立工具來做到這一點。所以我認爲SVGkit可能是最快/最簡單的方法。如何從SVGkit獲取CGPathRef?或更好的解決方案來爲CAKeyframeAnimation創建CGPath?

但我現在無法正確添加構成整個路徑的不同子路徑。

UPDATE:

到目前爲止,我有這樣的:

// l has already been setup and added to the main view layer: 
    // it's the CALayer whose position I'm trying to animate over the path. 


    SVGDocument *document = [SVGDocument documentNamed:@"pathtest.svg"]; 
    CALayer *f = [document layerTree]; 

    CGMutablePathRef path = CGPathCreateMutable(); 
    for(int i = 0; i < [f.sublayers count]; i++) 
    CGPathAddPath(path, NULL, ((CAShapeLayer*)[f.sublayers objectAtIndex:i]).path); 


    CAKeyframeAnimation *a = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
    a.path = path; 
    a.fillMode = kCAFillModeForwards; 
    a.removedOnCompletion = NO; 
    a.duration = 5.0; 
    [l addAnimation:a forKey:nil]; 

上面的代碼是 '差不多' 的權利(但不完全,搞笑):不同的子路徑使我的路徑是添加到主要路徑。但子路徑似乎不會被添加到以前的子路徑的末尾。也就是說,當運行動畫時,CALayer似乎翻譯了一段路徑,然後跳轉到一個不同的位置,從第二個子路徑平滑地開始,等等。對於組成主路徑的所有子路徑。

任何想法?

回答

0
  1. 你應該尋找層樹,只提取CAShapeLayer的 - 沒有別的有CGPath
  2. 所有CGPath的是 - 按定義! - 絕對。如果您希望它們是相對的,則必須手動採用每條路徑並將其複製並將其偏移X,Y像素,其中X,Y是當前點(前一個路徑的末尾)
  3. SVGkit正在進行大型儘快更改爲更簡單/更易於使用的API(這更接近SVG規範)。您可以在這裏試用:https://github.com/adamgit/SVGKit/tree/transforms - 但該分支目前正在「開發中」。它非常穩定,但有時會獲得exprimental提交。
相關問題