2012-09-14 14 views
0

我正在嘗試創建一個「metro」風格的UIScrollView。這與iTunes應用程序在新版本的ios版本中處理面板的方式類似,該版本不會被命名爲UIScrollView metro theme

我不知道如何讓我的意見佈局/滾動,以便順序中的下一個視圖顯示。我已經嘗試了各種各樣的東西,如保持contentSize的屏幕寬度,但移動每個視圖-10ish,所以它會顯示如上。我試過讓scrollView的邊界比屏幕小,所以它會顯示下一個視圖的一部分。什麼都沒有

這裏是我想要做的圖: enter image description here

似乎在紙面上非常瑣碎,但我似乎無法得到它的工作。

+0

contentSize方法似乎是正確的方法。唯一的是你需要在用戶從一個子視圖移動到另一個子視圖之後動態修改它。那種方法怎麼樣? – Kent

+0

這是我沒有嘗試過的最後一件事。從看*咳嗽*新的iOS *咳嗽* iTunes的滾動看起來非常順利。足夠流暢,看起來他們沒有更新任何東西,而滾動或之後。 – random

回答

1

我不知道如果我誤解你的要求 - 但是這可能是一個起點,看你怎麼可以設置它:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CGRect viewBounds  = self.view.bounds; 
    CGRect scrollViewFrame = CGRectMake(0, 0, floorf(CGRectGetWidth(viewBounds)/2.2), CGRectGetHeight(viewBounds)); 
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:scrollViewFrame]; 

    scrollView.center  = self.view.center; 
    scrollView.contentSize = CGSizeMake(CGRectGetWidth(viewBounds) * 3, CGRectGetHeight(viewBounds) * 3); 
    scrollView.pagingEnabled = YES; 
    scrollView.clipsToBounds = NO; 

    UIPanGestureRecognizer *gestureRecognizer = scrollView.panGestureRecognizer; 
    [self.view addGestureRecognizer:gestureRecognizer]; 

    for (int i = 0; i < 3; i++) { 
    CGRect frame = CGRectMake(10.f + (i * CGRectGetWidth(scrollView.bounds)), 10.f, CGRectGetWidth(scrollView.bounds) - 20.f, (CGRectGetHeight(scrollViewFrame) * 3) - 20.f); 
    UIView *view = [[UIView alloc] initWithFrame:frame]; 
    view.backgroundColor = [UIColor redColor]; 
    [scrollView addSubview:view]; 
    } 

    [self.view addSubview:scrollView]; 
} 

字面上只是把這個在一個空的viewController的viewDidLoad:

要注意的關鍵事情是

  • contentSize需要是足夠寬,所有的面板
  • clipsToBounds應該是NO,所以你可以看到更多的景色
  • 滾動視圖的邊界基本上是
  • pagingEnabled應設置
  • 我一把抓起滾動型的panGestureRecognizer,並連接到主視口包含視圖,以便在包含視圖的邊界中檢測平移(較大),否則您僅限於在滾動視圖邊界內檢測卷軸
+0

啊! 'clipsToBounds'就是我需要的!代碼也很好。非常感謝您的幫助。 – random