一次移动多个对象 - iOS

时间:2013-08-23 03:14:22

标签: ios objective-c frame cgrect cgrectmake

我有一个大约有10个对象的视图,我为它们设置了所有单独的标记。我想将它们全部向上移动20个点,使它们的原始Y位置减去20,使用for循环并迭代每个标记。我知道我可以做点什么

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

但这需要我给出X,Y,Width和Height。所以我的问题是,如何找到所有对象的原始坐标并将X,W和H设置为原始坐标并仅向上移动Y?

任何提示将不胜感激。

由于

3 个答案:

答案 0 :(得分:2)

只需将视图的新框架基于其当前框架:

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

答案 1 :(得分:2)

为什么不将相同的标记应用于您要移动的所有视图。这样,您可以使用for-in语句并检查标记是否是您要移动的视图的标记,如果条件为true,则对视图应用仿射变换。使用视图的transform属性而不是直接修改框架将允许知道视图与其原始位置的确切偏移。

NSInteger myTag = 4;

for (UIView *view in self.view.subviews) {
    if (view.tag == myTag) {
        [view setTransform:CGAffineTransformMakeTranslation(0.0f, - 20.0f)];
    }
}

答案 2 :(得分: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)];
}