一次移动多个对象-iOS

一次移动多个对象-iOS,ios,objective-c,frame,cgrect,cgrectmake,Ios,Objective C,Frame,Cgrect,Cgrectmake,我有一个视图,上面有大约10个对象,我已经为它们设置了所有单独的标记。我想把它们都向上移动20点,这样它们原来的Y位置减去20,使用for循环并遍历每个标记。我知道我可以做像这样的事情 [self.view viewWithTag:i].frame = CGRectMake(X, Y-20, W, H);; 但这需要我给出X,Y,宽度和高度。所以我的问题是,我怎样才能找到所有物体的原始坐标,并将X,W,H设置为原始坐标,只向上移动Y 任何提示都将不胜感激 谢谢我可能有个主意你可以试试。我在这里

我有一个视图,上面有大约10个对象,我已经为它们设置了所有单独的标记。我想把它们都向上移动20点,这样它们原来的Y位置减去20,使用for循环并遍历每个标记。我知道我可以做像这样的事情

[self.view viewWithTag:i].frame = CGRectMake(X, Y-20, W, H);;
但这需要我给出X,Y,宽度和高度。所以我的问题是,我怎样才能找到所有物体的原始坐标,并将X,W,H设置为原始坐标,只向上移动Y

任何提示都将不胜感激


谢谢

我可能有个主意你可以试试。我在这里假设您只使用从UIView继承的对象,如UIButton、UILabel、UIExtField等。您可以先将所有当前帧放入一个数组,然后将所有元素放入一个数组。这样,可以循环第二个数组,对于每个元素,将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)];
}
NSMutableArray*currentFrames=[[NSMutableArray alloc]init];

对于(int i=0;i我可能有一个想法,您可以试试。我假设您只使用从UIView继承的对象,如UIButton、UILabel、UIExtField等。您可以首先将所有当前帧放入一个数组,然后将所有元素放入一个数组。这样,您可以循环第二个数组,并且对于每个元素,将Y设置为array2[i]-二十,

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)];
}
NSMutableArray*currentFrames=[[NSMutableArray alloc]init];

对于(int i=0;i,只需将视图的新帧基于其当前帧:

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

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

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

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

NSInteger myTag = 4;

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

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

NSInteger myTag = 4;

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