Based on Kappa derived .
Thanks to : http://www.whizkidtech.redprince.net/bezier/circle/kappa/ .
Hope it helps !
bola = [CCSprite spriteWithFile:@"Bola.png"];
[bola setPosition:ccp(320/2,480/2+75)];
[self addChild:bola];
[bola runAction:[self returnBezierCurveWithDuration:1 andRadius:75 AndObjectPosition:bola.position];
- (CCFiniteTimeAction *)returnBezierCurveWithDuration:(float)_time andRadius:(int)_radius AndObjectPosition:(CGPoint)_pos {
ccBezierConfig bezierOne ;
bezierOne.controlPoint_1 = _pos ;
bezierOne.controlPoint_2 = ccp(_pos.x+_radius*sin(45) , _pos.y-(_radius-(_radius*sin(45))));
bezierOne.endPosition = ccp(_pos.x+_radius,_pos.y-_radius) ;
ccBezierConfig bezierTwo ;
bezierTwo.controlPoint_1 = ccp(_pos.x+_radius,_pos.y-_radius) ;
bezierTwo.controlPoint_2 = ccp(_pos.x+_radius*sin(45) , _pos.y-_radius-(_radius*sin(45)) );
bezierTwo.endPosition = ccp(_pos.x,_pos.y-_radius*2) ;
ccBezierConfig bezierThree ;
bezierThree.controlPoint_1 = ccp(_pos.x,_pos.y-_radius*2) ;
bezierThree.controlPoint_2 = ccp(_pos.x-_radius*sin(45) , _pos.y-_radius-(_radius*sin(45)) );
bezierThree.endPosition = ccp(_pos.x-_radius , _pos.y-_radius) ;
ccBezierConfig bezierFour ;
bezierFour.controlPoint_1 = ccp(_pos.x-_radius , _pos.y-_radius) ;
bezierFour.controlPoint_2 = ccp(_pos.x-_radius*sin(45) , _pos.y-(_radius-(_radius*sin(45))) );
bezierFour.endPosition = _pos ;
return [CCSequence actions:
[CCBezierTo actionWithDuration:_time/4 bezier:bezierOne],
[CCBezierTo actionWithDuration:_time/4 bezier:bezierTwo],
[CCBezierTo actionWithDuration:_time/4 bezier:bezierThree],
[CCBezierTo actionWithDuration:_time/4 bezier:bezierFour],
nil];
}