我有UIScrollView的子類。其內容是可重複使用的 - 大約4或5次用於顯示數百個元素(滾動時隱藏的對象重用,並跳轉到當其需要看到他們另一個位置)如何正確動畫UIScrollView contentOffset
我需要什麼:能夠自動滾動我將視圖滾動到任何位置。例如,我的滾動視圖顯示第4,第5和第6個元素,當我點擊某個按鈕時,它需要滾動到第30個元素。換句話說,我需要UIScrollView的標準行爲。
這工作得很好:
[self setContentOffset:CGPointMake(index*elementWidth, 0) animated:YES];
,但我需要一些定製。例如,更改動畫持續時間,添加一些代碼以在動畫結束時執行。
明顯的決定:
[UIView animateWithDuration:3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
[self setContentOffset:CGPointMake(index*elementWidth, 0)];
} completion:^(BOOL finished) {
//some code
}];
但我已經連接了一些行動,以滾動的事件,所以他們現在都是在動畫塊,它會導致所有子視圖的幀動畫太(感謝一些可重複使用元素個個動畫不是我想要的)
的問題是:我怎樣才能讓自定義動畫(其實我需要自定義工期,對內容的最終和BeginFromCurrentState選項)的行動抵消WITH OUT動畫所有代碼,連接到scrollViewDidScroll
事件?
UPD: 由於Andrew's answer(第一部分)我解決了問題,動畫裏面scrollViewDidScroll
:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
[UIView performWithoutAnimation:^{
[self refreshTiles];
}];
}
但scrollViewDidScroll
必須(對我而言)執行動畫的每一幀,就像是在的情況下,
[self setContentOffset:CGPointMake(index*elementWidth, 0) animated:YES];
但是,現在它只在動畫開始時執行一次。
我該如何解決這個問題?
謝謝!這是如此明顯) 它幫助和現在「scrollViewDidScroll」執行沒有動畫。但是,與「contentOffset」的系統動畫幾次執行(我相信每幀)的情況不同,現在它只執行一次。 你有想法如何解決這個問題嗎? – Lloyd18
在我的回答中添加了對您的評論的答案,因爲評論的評論時間很長。 – Andrew
精彩的回答!非常感謝! – Lloyd18