2011-01-21 35 views
6

我是一個初學者,當談到頁面控制,這就是爲什麼我不知道100%,如果我的標題與我想要的一致。我想創建一個UIPageControl,當用戶在屏幕上滑動時,視圖會切換到另一個視圖,並且屏幕底部的UIPageController會自行更新。另外,爲了讓我的請求更加令人困惑,我希望屏幕底部的標籤欄可以隨着視圖的變化而保持不變。UIViews與UIPageControl

這方面的一個很好的例子是Iconfactory的斜坡冠軍: http://img.slidetoplay.com/screenshots/ramp-champ_5.jpg

底部的酒吧原地踏步,而在屏幕上移動的項目的其餘部分。最簡單的方法是什麼?

編輯:我知道我必須使用UISrollView,我只是不知道如何去實現它...

回答

22

我相信你在找什麼實際上是一個UIScrollView與pagingEnabled設爲是。您可以將scrollview作爲常規UITabBar上方的視圖。您將使用UIPageControl來獲取小點。您可以通過實現滾動視圖的適當委託方法(可能是-scrollViewDidScroll:)在UIScrollView滾動到頁面時以編程方式更新它。

假設您有兩個ivars:scrollView和pageControl。當你知道你的滾動視圖有多少頁時,你可以設置scrollView的contentSize。它應該是scrollView邊界的倍數。例如,如果頁數是靜態的,你可以硬編碼在你的-viewDidLoad ...

- (void)viewDidLoad { 
    // Any other code. 

    scrollView.pagingEnabled = YES; 
    scrollView.contentSize = CGSizeMake(scrollView.bounds.size.width * 3, scrollView.bounds.size.height); // 3 pages wide. 
    scrollView.delegate = self; 
} 

然後更新您的小點......

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    CGFloat pageWidth = scrollView.bounds.size.width; 
    NSInteger pageNumber = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    pageControl.currentPage = pageNumber; 
} 
+0

謝謝,你有任何形式的源代碼如何做到這一點? (我找不到) – 2011-01-21 21:16:05

+0

@安迪B,是的。我用一種標準方法編輯了我的答案。 – 2011-01-21 21:44:35

2

您需要使用UIScrollView

假設你有一個叫做滾動視圖

int amountOfFrames = 10; 
    scrollView.pagingEnabled = TRUE; 
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * amountOfFrames, scrollView.frame.size.height); 
    scrollView.delegate = self; 

您將一個名爲伊娃然後需要實現所需的委託方法,使您可以更新網頁,控制

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{ 
    // Switch the indicator when more than 50% of the previous/next page is visible 
    CGFloat pageWidth = scrollView.frame.size.width; 
    int page = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    pageControl.currentPage = page; 
} 

你需要將你想成爲滾動這些滾動視圖內任何內容,最好lazyload進去,如果內容,你會顯示將需要大量的堆內存,使用scrollviewDidScroll刪除和添加內容在所需的位置