2010-04-20 49 views
1

我想將scrollview用作水平模式下的選取器。 滾動視圖最多可容納七個子視圖。每個子視圖代表一個值。 總是有三個視圖可見,而中間的視圖是選定的視圖。Objective-C:UIScrollView手動分頁

Scrollview在開始時可見:

__ | V1 | V2

Scrollview設置爲查看/值二:

V1 | V2 | V3

Scrollview設置爲最後一個值:

V2 | V3 | __

我得到的真正問題是「pagingEnabled」標誌。 如果pagingEnabled設置爲YES,則滾動視圖始終顯示三個子視圖/值,而不是唯一一個。 如果pagingEnabled設置爲NO,那麼滾動視圖不會成交。

有沒有一個很好的解決我的問題?

非常感謝, 丹)

+0

看到我對這個問題的回答:http://stackoverflow.com/a/10993426/60488 – 2012-06-12 09:02:16

回答

4

更改滾動視圖的幀爲,如同其在僅顯示所述中間視圖(即三分之一其原始寬度的,並以相同的量偏移),但隨後將其clipsToBounds屬性設置爲NO。

+0

這是一個不錯的解決方案。感謝:D – Daniel 2010-04-29 08:18:06

+0

但是你是否仍然希望在選擇V2時顯示V1和V3的用戶部分?沒有將寬度縮小到1/3,這樣一次只能看到1個項目? (我想你會希望1/2 + 1 + 1/2一次可見。不是嗎? – Susanna 2010-06-02 22:15:59

+0

閱讀OP的帖子 - 他希望1 + 1 + 1一次可見,而不是1/2 + 1 + 1/2 。看看文檔,看看什麼設置'clipsToBounds'爲NO實現:) – hatfinch 2010-06-03 15:39:56

1

如果其他人感興趣,我找到了解決方案。

指定您查看滾動視圖的委託。 Ovveride scrollViewDidEndDecelerating,然後通過做類似的事情來獲得當前的索引(你想要的頁面)。

NSNumber* currentIndex = [NSNumber numberWithInt:round(scrollview.Contentoffset.x/PAGE_SIZE)]; 

//Then just update your scrollviews offset with 


[scrollview setContentOffset:CGPointMake([currentIndex intValue] * PAGE_SIZE, 0) animated:YES]; 
0

由於iOS 5中,有上UIScrollViewDelegatescrollViewWillEndDragging:withVelocity:targetContentOffset:委託方法。這使您可以實現任意分頁。

爲此,首先需要將pagingEnabled屬性設置爲NO,否則我所說的委託方法不會被調用。當用戶提起手指並且滾動視圖想要確定在哪裏完成滾動時,滾動視圖現在調用該委託方法。

魔術是最後一個參數,targetContentOffset:它是指向CGPoint的指針,用作輸入/輸出變量。這意味着這個變量告訴你滾動視圖要滾動到的位置。但它允許你修改這個目標位置。 velocity也可能是有趣的,它可以給你一個指示,用戶是否「推動」滾動視圖或移動它,停止,然後舉起他的手指。

例如,下面的實現將目標位置x四捨五入爲100的最接近倍數,從而使「頁面」寬度爲100點。

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 
{ 
    targetContentOffset->x = round(targetContentOffset->x/100.0) * 100.0; 
}