Как я могу получить CGPathRef от SVGkit?или лучшее решение для создания CGPaths для CAKeyframeAnimation? - PullRequest
1 голос
/ 29 января 2012

Мне в основном нужен способ графического создания путей для импорта в мое приложение, чтобы я мог использовать их в объектах CAKeyframeAnimation в качестве пути анимации. Мне также не хватает времени, чтобы развернуть свой собственный отдельный инструмент, чтобы сделать это в данный момент. Поэтому я подумал, что SVGkit может быть самым быстрым / простым способом обойти это.

Но теперь у меня проблемы с добавлением различных подпутей, составляющих весь путь.

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, кажется, транслирует через один сегмент пути, затем переходит в другое место, откуда он начинает плавно перемещаться по второму подпути, и т. Д. Для всех подпутей, составляющих основной путь.

Есть идеи?

1 Ответ

0 голосов
/ 30 июля 2012
  1. Вы должны искать дерево слоев и извлекать только CAShapeLayer's - ничто другое не имеет CGPath
  2. все CGPath - по определению! абсолют. Если вы хотите, чтобы они были относительными, вы должны вручную взять каждый путь, скопировать его и сместить его на X, Y пикселей, где X, Y - текущая точка (конец предыдущего пути)
  3. Скоро SVGkit претерпевает большие изменения в более простой / легкий в использовании API (который ближе к спецификации SVG). Вы можете попробовать это здесь: https://github.com/adamgit/SVGKit/tree/transforms - но эта ветка в настоящее время "в разработке". Это довольно стабильно, но иногда получает экспериментальные коммиты.
...