2013-04-23 55 views
0

期間復位的UIScrollView contentOffset我有一個UIScrollView被垂直coreAnimation滾動如下:CoreAnimation

- (void) scrollAnimation 
{ 
    CGRect bounds = scrollview.bounds; 

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds"]; 
    animation.duration = 1.0; 
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 

    animation.fromValue = [NSValue valueWithCGRect:bounds]; 

    bounds.origin.y += 1000; 

    animation.toValue = [NSValue valueWithCGRect:bounds]; 

    [scrollview.layer addAnimation:animation forKey:@"bounds"]; 

    scrollview.bounds = bounds; 
} 

scrollView的實際高度是小於總的動畫,所以我想重新設置contentOffset爲0當滾動視圖達到其高度時,並無縫地繼續動畫。

當我嘗試內

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.y >= 600) 
    { 
     [scrollView setContentOffset:CGPointMake(0, 0)]; 
    } 
} 

做到這一點的方法,似乎沒有動畫過程中被調用。當試圖在scrollView上使用Key-Value觀察者時,會發生同樣的情況,手動滾動時該方法調用得很好,但在coreAnimation期間調用方法不錯。定期檢查使用NSTimer方法也證明是徒勞的。

如何在coreAnimation期間獲得contentOffset(或scrollview.bounds),並重置它?
我希望動畫scrollView,以便內容(幾個UILabels)在大於內容大小的動畫上無縫滾動。

回答

2

UIScrollViews在動畫過程中實際上不會改變它們的偏移量。如果你想「重置」偏移量,我會建議找出如何在正確的時間結束動畫,然後設置邊界。

您也可以使用UIScrollView的setContentOffset:animated:方法。你不會對動畫有太多的控制,但當它滾動並完成時你會得到通知。

+0

我認爲可能是這種情況。然而,在觸摸事件的正常滾動期間(即使正在進行動量滾動),這些值是可訪問的嗎?什麼是完成這種動畫的最簡單的方法,即。一個垂直滾動數字自動收報機?目前我正在考慮通過非常小的線性值來動畫它,並通過緩動函數計算持續時間值,但這似乎不是實現它的最佳方式。 – stefmalawi 2013-04-24 00:43:34

+0

UIScrollView真的不是爲此而構建的。你可以看看這裏的一些答案:http://stackoverflow.com/questions/5675535/how-to-implement-cyclic-scrolling-on-tableview,但我不認爲你會最終以一個偉大的解。 – 2013-04-24 16:39:15