Вопрос по ios, ipad, iphone – Как анимировать одно изображение по необычной кривой линии в моем приложении для iPad?

0

У меня есть два отдельных изображения.

CurvedPath image (Attached Below) PersonImage

enter image description here

Как видите, этот путь не имеет идеальной дуги для одного угла.

У меня есть другой PersonImage, который я хочу анимировать точно над центральной линией для этого изображения дуги с эффектом увеличения.

Эта анимация должна начинаться с нижней левой точки до верхней правой точки.

Как добиться такой анимации?

Я читал об анимации QuartzCore и BeizerPath, но, поскольку у меня меньше знаний о них, мне будет трудно быстро добиться этого.

просто посетите этот урок. я думаю, что это решит вашу проблему ..blog.devedup.com/index.php/2010/03/03/… jamil
Что вы пробовали, чтобы это не сработало? Как было создано изображение? Можете ли вы восстановить точный Безье, который был использован для его создания? Можете ли вы создать безье самостоятельно в Photoshop или в каком-либо подобном приложении? user1118321

Ваш Ответ

1   ответ
4
Moving along a path

по которому вы хотите анимировать выравнивание изображения, вы можете делать это с помощью Core Animation и CAKeyframeAnimation.

Создайте анимацию ключевого кадра для свойства position и установите его анимацию вдоль вашего пути

CAKeyframeAnimation *moveAlongPath = [CAKeyframeAnimation animationWithKeyPath:@"position"];
[moveAlongPath setPath:myPath]; // As a CGPath

Если вы создали свой путь как UIBezierPath, вы можете легко получить CGPath, вызвавCGPath на пути Безье.

Далее вы настраиваете анимацию с продолжительностью и т. Д.

[moveAlongPath setDuration:5.0]; // 5 seconds
// some other configurations here maybe...

Теперь вы добавляете анимацию к слою imageView, и она будет анимироваться по пути.

[[myPersonImageView layer] addAnimation:moveAlongPath forKey:@"movePersonAlongPath"];

Если вы никогда ранее не использовали Core Animation, вам нужно добавить QuartzCore.framework в свой проект и добавить#import <QuartzCore/QuartzCore.h> в верхней части вашей реализации.

Creating a UIBezierPath

Если вы не знаете, что такое безье, посмотрите насайт Википедии. Когда вы знаете свои контрольные точки, вы можете создать простой путь Безье, как этот (где все точки являются обычными CGPoints):

UIBezierPath *arcingPath = [UIBezierPath bezierPath];
[arcingPath moveToPoint:startPoint];
[arcingPath addCurveToPoint:endPoint 
              controlPoint1:controlPoint1 
              controlPoint2:controlPoint2];
CGPathRef animationPath = [arcingPath CGPath]; // The path you animate along
Zooming up

Для достижения эффекта масштабирования вы можете применить аналогичную анимацию, используя CABasicAnimation для преобразования слоя. Просто анимируйте от 0-масштабного преобразования (бесконечно малое) до 1-масштабного преобразования (нормальный размер).

CABasicAnimation *zoom = [CABasicAnimation animationWithKeyPath:@"transform"];
[zoom setFromValue:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 1.0);];
[zoom setToValue:[NSValue valueWithCATransform3D:CATransform3DIdentity];
[zoom setDuration:5.0]; // 5 seconds
// some other configurations here maybe...
[[myPersonImageView layer] addAnimation:zoom forKey:@"zoomPersonToNormalSize"];
Both at the same time

Чтобы обе анимации запускались одновременно, вы добавляете их в группу анимаций и вместо этого добавляете их в представление изображения человека. Если вы сделаете это, вы настроите группу анимации (с продолжительностью и т. Д. Вместо отдельных анимаций).

CAAnimationGroup *zoomAndMove = [CAAnimationGroup animation];
[zoomAndMove setDuration:5.0]; // 5 seconds
// some other configurations here maybe...
[zoomAndMove setAnimations:[NSArray arrayWithObjects:zoom, moveAlongPath, nil]];
[[myPersonImageView layer] addAnimation:zoomAndMove forKey:@"bothZoomAndMove"];
Error: User Rate Limit Exceeded Mrunal
Error: User Rate Limit Exceeded Mrunal
Error: User Rate Limit Exceeded[myView setPosition:endPoint]; [[myPersonImageView layer] addAnimation:zoomAndMove forKey:@"bothZoomAndMove"];
Error: User Rate Limit Exceeded Mrunal
Error: User Rate Limit Exceeded

Похожие вопросы