Что-то вроде этого должно делать то, что вы просите:
float y = initialYValue;
BOOL yInBadRanges = NO;
while (!yInBadRanges) {
for (NSNumber *coordinate in self.badCoords) {
CGFloat upperLimit = [coordinate floatValue]+21.0f;
CGFloat lowerLimit = [coordinate floatValue]-21.0f;
if (y <= upperLimit && y >= lowerLimit) {
yInBadRanges = YES
break;
}
}
if (!yInBadRanges) y = [self somethingNew];
}
Обратите внимание, что то, как вы изначально просили об этом, не то, как я это сделал. Нет смысла преобразовывать условные выражения в форматированную строку, как вы делаете, потому что вы не можете использовать строку в качестве условного выражения в цикле while таким образом.
Ваш комментарий немного проясняет ваши намерения, но без подробностей сложно предложить конкретный курс действий. Мой совет - хорошо подумать о том, как сделать то, что вы пытаетесь достичь, не задаваясь каким-то конкретным способом сделать это с самого начала. Там может быть лучший алгоритм для размещения элементов управления ...
(применяется стандартный отказ от ответственности: я набрал это в редакторе ответов, не запуская его ...)