You could instead get a random angle (within some range) and then use that for the initial direction of the ball. Something like: // min angle: 10, max angle: 170 int min_angle = 10; int max_angle = 170; int degrees = arc4random_uniform(max_angle - min_angle) + min_angle; float radians = degrees * M_PI/180.0f; myVector = CGVectorMake(cos(radians), sin(radians)); This will be a unit direction vector though, so, you would want to multiply this by whatever amount of force you want in this direction.