Вам нужен массив возможных местоположений, которые не перекрываются:
CGPoint possibleLocations[] = {
{ 0, 0 },
{ 25, 25 },
{ 25, 50 },
// etc.
}
int numLocations = sizeof(possibleLocations) / sizeof(CGPoint);
BOOL takenLocations[numLocations];
CGPoint finalLocation;
int index;
while ((takenLocations[index = arc4random_uniform(numLocations]))
{
}
takenLocations[index] = YES;
finalLocation = possibleLocations[index];