2013-08-23 45 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向上移動?

任何提示將不勝感激。

謝謝

回答

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語句並檢查標記是否爲要移動的視圖的標記,如果條件爲真,請將仿射變換應用於視圖。使用視圖的transform屬性而不是直接修改框架將允許從視圖的原始位置知道視圖的精確偏移量。

NSInteger myTag = 4; 

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