2013-08-23 7 views
0

У меня есть представление с примерно 10 объектами на нем, и я установил для них все отдельные теги. Я хотел бы переместить их на 20 пунктов, чтобы их исходная позиция Y минус 20, используя цикл for и итерацию через каждый тег. Я знаю, что могу сделать что-то вродеПереместить сразу несколько объектов - iOS

[self.view viewWithTag:i].frame = CGRectMake(X, Y-20, W, H);; 

, но для этого требуется, чтобы я дал X, Y, ширину и высоту. Поэтому мой вопрос: как я могу найти исходные координаты для всех объектов и установить X, W и H в исходное и только переместить Y вверх?

Любые советы были бы весьма признательны.

Thanks

ответ

2

Просто основывает новый кадр мнения, на его текущем одном:

UIView* view = [self.view viewWithTag:i]; 
CGRect frame = view.frame; 
frame.origin.y -= 20; 
view.frame = frame; 
0

Возможно, у меня есть идея, которую вы можете попробовать. Я предполагаю, что вы используете объекты, которые наследуются от UIView, такие как UIButton, UILabel, UITextField и т. Д. Вы можете сначала поместить все текущие кадры в массив и затем поместить все элементы в массив. Таким образом, вы можете закодировать второй массив, и для каждого элемента установите Y как array2 [i] -20.

NSMutableArray *currentFrames = [[NSMutableArray alloc] init]; 
for(int i = 0; i<10; i++) //10 being the number of elements, assuming they have tags from 0 to 9 
    [currentFrames addObject:[NSValue valueWithCGRect:[self.view viewWithTag:i].frame]]; 

for(int i = 0; i<currentFrames.count; i++) 
{ 
    UIView *v = [self.view viewWithTag:i]; 
    [v setFrame:CGRectMake(v.frame.origin.x, v.frame.origin.y-20, v.frame.size.width, v.frame.size.height)]; 
} 
2

Почему бы не просто применять один и тот же тег для всех представлений, которые вы хотите переместить. Таким образом, вы можете использовать оператор for-in и проверить, является ли тег тегом, который вы хотите переместить, и если условие истинно, примените аффинное преобразование к представлению. Использование свойства преобразования вида вместо прямого изменения кадра позволит узнать точное смещение представления из его исходного положения.

NSInteger myTag = 4; 

for (UIView *view in self.view.subviews) { 
    if (view.tag == myTag) { 
     [view setTransform:CGAffineTransformMakeTranslation(0.0f, - 20.0f)]; 
    } 
} 
Смежные вопросы