2012-09-11 52 views
0

我需要讓我的UISCrollView只接受一個方向的滾動,而不僅僅是一個方向。 ScrollView包含水平方向播放列表中歌曲的專輯封面。它被分頁,所以每個封面都有自己的頁面。當用戶將蓋子向左或向右滑動或滑動時,下一個蓋子滑動到位並播放下一首歌曲。單向UIScrollView

它不應該可以返回到前一首歌或覆蓋。我如何防止這種行爲?

我試過如下:

- (void)scrollViewDidScroll:(UIScrollView *)scrolledView 
{ 
    if(scrollView.contentOffset.x < (pageIndex * 320) - 320) 
     [scrollView setContentOffset:CGPointMake((pageIndex * 320) - 320, 0)]; 
} 

但是,如果我做一個快速滑動的「過去」的方向,封面將大約150像素滑動到「下一個」方向,奇怪。

我也嘗試使用removeFromSuperview刪除以前的封面,但這隻留下黑色空間,拖動仍然可以完成。

最後,我試圖移動蓋:

-(void) reloadCoverScrollView{ 
    for(int i = 1; i < [scrollView.subviews count]; i++){ 
     [scrollView exchangeSubviewAtIndex:i withSubviewAtIndex:i - 1]; 
    } 
    [scrollView setNeedsDisplay]; 
} 

我怎麼能做到我想要什麼? ScrollView的行爲就好像它總是在第一頁。謝謝。

回答

0

你有兩個選擇:

  1. 您建立自己的自定義視圖
  2. 用戶通過移動當前頁面改變了滾動的行爲在偏移0

我解釋這兩種解決方案:

** CUSTOM VIEW(NO SCROLL VIEW)* 這裏您需要的是一個滾動視圖w這裏大多數有用的滾動視圖功能被刪除:沒有連續滾動(但分頁),沒有縮放,有限的內容大小(所以你只限於一頁)。 在我看來你應該在視圖控制器中實例化兩個視圖:一個是當前視圖,另一個是下一個視圖;當前視圖是可見的,下一個視圖放在窗口外面。然後,您添加一個手指平移手勢並通過跟蹤其狀態(這是一個連續的手勢),您可以將第二個視圖滑到第一個視圖的頂部;當你考慮刷卡完成後,你將完成動畫。在動畫的最後,你設定的新的一頁「第一」和渲染下一個查看隱藏的第二頁,等等...

**繼續使用滾動視圖**

在這種如果您的視圖控制器的行爲像UIScrollView委託必須以可見頁面放置在內容偏移零的方式行事。因此,假設您從第0頁開始,並且在滾動視圖中有一個頁面列表:第1頁,第2頁,... 只要您滑動到page1並且動畫完成,您就立即翻譯頁面中的所有視圖1左邊一頁(所以如果你的頁面寬度爲320px,你將在左邊翻譯320px的所有子視圖),你將移除第0頁的子視圖。然後你將重置你的滾動視圖內容偏移到原點(0 ,0)。所以最後你將新的頁面設置在位置0,頁面2移動到位置1,等等。向左滾動是不可能的,但只能向右滾動。 當你使用「removeFromSuperview」你做了正確的事情,但你忘了翻譯子視圖並重置內容偏移量。