In my attempts to animate objects along a circular/elliptical path, I
naturally turned to CGPathAddEllipseToPoint.  Imagine a clock face with four
equidistant objects located on the path; I want the objects to animate 360
degrees from their start points.  Using the elliptical path, all four
objects consistently move to the 3 o'clock position, and rotate around the
path all stacked together before jumping back to their starting positions.
 When I then used CGPathAddArc, it behaved the same way - always starting at
the 3 o'clock position.  I'm guessing that both methods start and end the
path at that same position.
To get around this, I tried CGPathAddArcToPoint.  I know the path is being
laid out correctly, because when I draw it in a context, I get a perfect
circle.  I know that all my objects are sitting on the path, because I
verified this with CGPathContainsPoint.

In the case of CGPathAddEllipseToPoint and CGPathAddArc is there any way to
move the starting position of the ellipse/arc to a user-defined point?

The offending code from my CGPathAddArcToPoint implementation is below.
 Like I said, it draws a perfect circle, but I can't animate along it.  If I
replace the arcs with a single elliptical path, the animation works, but
from the wrong starting points.


Thanks in advance.
Gordon



CGPoint arc[8] =

{

CGPointMake(200.0, 300.0),

CGPointMake(300.0, 300.0),

CGPointMake(300.0, 200.0),

CGPointMake(300.0, 100.0),

CGPointMake(200.0, 100.0),

CGPointMake(100.0, 100.0),

CGPointMake(100.0, 200.0),

CGPointMake(100.0, 300.0),

};



CGMutablePathRef thePath = CGPathCreateMutable();

CGPathMoveToPoint(thePath, NULL, arc[0].x, arc[0].y);

CGPathAddArcToPoint(thePath, NULL, arc[1].x, arc[1].y, arc[2].x, arc[2].y,
100.0);

CGPathAddArcToPoint(thePath, NULL, arc[3].x, arc[3].y, arc[4].x, arc[4].y,
100.0);

CGPathAddArcToPoint(thePath, NULL, arc[5].x, arc[5].y, arc[6].x, arc[6].y,
100.0);

CGPathAddArcToPoint(thePath, NULL, arc[7].x, arc[7].y, arc[0].x, arc[0].y,
100.0);

CGPathCloseSubpath(thePath);


CAKeyframeAnimation *followPath = [CAKeyframeAnimation animationWithKeyPath:
@"position"];

followPath.path = thePath;

followPath.delegate = self;

followPath.duration = animationDuration;

followPath.calculationMode = kCAAnimationPaced;

followPath.timingFunction = [CAMediaTimingFunction functionWithName:
kCAMediaTimingFunctionEaseInEaseOut];

return followPath;
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to