我有一个大约有10个对象的视图,我为它们设置了所有单独的标记。我想将它们全部向上移动20个点,使它们的原始Y位置减去20,使用for循环并迭代每个标记。我知道我可以做点什么
[self.view viewWithTag:i].frame = CGRectMake(X, Y-20, W, H);;
但这需要我给出X,Y,Width和Height。所以我的问题是,如何找到所有对象的原始坐标并将X,W和H设置为原始坐标并仅向上移动Y?
任何提示将不胜感激。
由于
答案 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)];
}