0

我有一个包含大约 10 个对象的视图,并且我已经为它们设置了所有单独的标签。我想将它们全部向上移动 20 个点,使它们的原始 Y 位置减去 20,使用 for 循环并遍历每个标签。我知道我可以做类似的事情

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

但这需要我给出 X、Y、宽度和高度。所以我的问题是,我怎样才能找到所有对象的原始坐标并将 X、W 和 H 设置为原始坐标并且只将 Y 向上移动?

任何提示将非常感谢。

谢谢

4

3 回答 3

2

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

UIView* view = [self.view viewWithTag:i];
CGRect frame = view.frame;
frame.origin.y -= 20;
view.frame = frame;
于 2013-08-23T03:21:33.233 回答
2

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

NSInteger myTag = 4;

for (UIView *view in self.view.subviews) {
    if (view.tag == myTag) {
        [view setTransform:CGAffineTransformMakeTranslation(0.0f, - 20.0f)];
    }
}
于 2013-08-23T03:21:51.017 回答
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)];
}
于 2013-08-23T03:21:19.777 回答