float frictionConstant = 20; static const float springConstant = 300; CGFloat time = (CGFloat) dt; // friction force = velocity * friction constant CGPoint frictionForce = CGPointMultiply(self.velocity, frictionConstant); // spring force = (target point - current position) * spring constant CGPoint springVector = CGPointSubtract(self.targetPoint, self.view.center); CGPoint springForce = CGPointMultiply(springVector, springConstant); // force = spring force - friction force CGPoint force = CGPointSubtract(springForce, frictionForce); // velocity = current velocity + force * time / mass self.velocity = CGPointAdd(self.velocity, CGPointMultiply(force, time)); // position = current position + velocity * time self.view.center = CGPointAdd(self.view.center, CGPointMultiply(self.velocity, time)); // stop the animation when it's done... }