2011-02-07 51 views
6

我使用UIScrollView作爲使用核心動畫的組件的基礎。當用戶滑動視圖時,我想根據滾動視圖的目標(靜止)位置來定位元素。爲此,我需要在scrollViewWillBeginDecelerating方法或類似方法中計算UIScrollView的目標contentOffset。如何計算運動中的UIScrollView的目標contentOffset

我之所以需要這個是我將使用目標contentOffset動畫嵌套到其最終位置滾動視圖的內容查看內意見。我當然可以設置contentOffset或類似的觀察者,但這會導致混亂的動畫,因爲嵌套視圖會在減速期間多次更新其位置。我希望這隻發生一次。

有沒有簡單的方法來做到這一點?

+2

看來別人有這個必要太:http://stackoverflow.com/questions/1651560/predicting-the-resting-offset-in-a-uiscrollview-after-deceleration – Tricky 2011-02-07 18:34:20

回答

0

是否有一個特定的原因,您需要事先知道滾動視圖將停止的位置?您可以將視圖定位在滾動視圖委託的實現中layoutSubviews(如果您是UIScrollView的子類)或scrollViewDidScroll:

+1

你好,是的,有。我將使用該位置將嵌套在scrollview的contentView中的視圖動畫化爲其最終位置。我當然可以設置contentOffset或類似的觀察者,但這會導致混亂的動畫,因爲嵌套視圖會在減速期間多次更新其位置。 – Tricky 2011-02-07 16:48:39

0

我相信你指的是由pagingEnabledUIScrollView自動提供的行爲。從UIScrollView上的iOS Reference Library開始,當啓用分頁功能時,「當用戶滾動時,滾動視圖停止滾動視圖邊界的倍數」。我一直都在使用這種行爲,我相信你正在描述。它爲您處理所有的辛苦工作 - 只需設置一個屬性!

更新:我想我誤解你的問題。您始終可以檢查UIScrollViewcontentOffset屬性以確定其滾動視圖內的當前原點。您可以使用其中一種代理方法執行此操作,可能爲scrollViewDidEndDecelerating:

+0

是的,你可以得到當前contentOffset,但我需要目標contentOffset ... – Tricky 2011-02-07 16:50:11

1

有一個委託方法如下:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS5(5_0); 

據商務部:

叫上的手指,如果用戶拖動。速度以點/秒爲單位。可以更改targetContentOffset以調整滾動視圖的位置。 not paging when pagingEnabled is YES

0

不知道你是否仍然需要這個。但這是你如何獲得UIScrollView的委託。

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{ 
NSLog(@"X offset: %f", targetContentOffset->x); 
NSLog(@"Y offset: %f", targetContentOffset->y); 
} 
相關問題