2011-05-27 74 views
1

我在UIScrollView中顯示大量圖像。在UIScrollview中佈置圖像

我也對視圖,其在按下時將擴大視圖,如圖所示的按鈕:

- (IBAction) expandButtonTouched { 
    NSLog(@"Expand Button Touched"); 
    CGRect frame = CGRectMake(0, 50, 320, 410); // New scrollview location 
    CGRect scrollviewFrame = CGRectMake(0, 30, 320, 380); 
    [UIView beginAnimations:@"MoveAndStrech" context:nil]; 
    [UIView setAnimationDuration:1]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    self.frame = frame; 
    scrollView.frame = scrollviewFrame; 

    [self layoutScrollImages]; 


    [UIView commitAnimations]; 
} 

我的佈局圖像的方法被定義爲這樣:

- (void)layoutScrollImages 
{ 
    UIImageView *view = nil; 
    NSArray *subviews = [scrollView subviews]; 

    // reposition all image subviews in a horizontal serial fashion 
    CGFloat curXLoc = 0; 
    for (view in subviews) 
    { 
     if ([view isKindOfClass:[UIImageView class]] && view.tag > 0) 
     { 
      CGRect frame = view.frame; 
      frame.origin = CGPointMake(curXLoc, 0); 
      view.frame = frame; 

      curXLoc += (kScrollObjWidth); 
     } 
    } 

    // set the content size so it can be scrollable 
    [scrollView setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView bounds].size.height)]; 
} 

問題是,在調整滾動視圖的大小後,其內容不會重新排序。它仍然只顯示圖像,在這裏我想它顯示爲這樣的單排(基於每第9張圖片):

1 2 3 | 10 11 12 | 19 20 21 
4 5 6 | 13 14 15 | 22 23 24 
7 8 9 | 16 17 18 | 25 26 27 (and so on) 
+0

你也可以失去UIImageView *聲明以及(UIImageView *視圖在子視圖中){....... – Matt 2011-05-27 23:28:20

+0

@Matt UIScrollView中的滾動條在[UIScrollView子視圖]。 – TheBlack 2011-05-27 23:52:08

回答

1

您設置在代碼中curXLoc但從來沒有設置其y位置,你不能期望調整滾動視圖的大小,並開始推送內容到額外的空間,除非你修改你的佈局代碼來考慮y位置。

我會有一些代碼檢查可用高度(y),如果有足夠的空間添加額外的行。您需要決定是否先填充行或列,因爲它會影響項目顯示的順序

從您的代碼看起來您​​想先填充行,因此您需要定義一個項目行並更改循環代碼,以便在新行開始時將x值移回到開始位置......沒有自動執行此操作的方法,即使您自己的代碼顯示您只是調整x值...

這行代碼

frame.origin = CGPointMake(curXLoc, 0); 

有一個文字的0 y,則需要增加更多的邏輯來決定你是否會調整在y VALU e基於滾動視圖的高度

+0

Matt有可能向我發送一個小范例代碼嗎? – 2011-05-28 00:40:00

+0

嗨,對不起,我已經離開了幾天,是的,你可以給我一些示例代碼[email protected] – Matt 2011-05-30 21:48:12