2014-04-13 31 views
1

我使用這種方法:滾動型更新

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

,我讓我的滾動視圖偏移的更新。問題是我的滾動視圖經常更新自己。有沒有辦法縮短更新間隔?

+0

什麼是你想達到與?這是完全okey,你得到它每一次,當滾動視圖didScroll –

+0

不,但你可以fitler它自己。保持你使用的最後一個值的時間,並在獲得新值時比較你的實際時間... –

+0

使用'NSTimer'來累積消息,有大量的例子在做這個。 –

回答

0

下面是一個使用定時器來實現這一草案:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if (!_delayTimer) { 
     _delayTimer = [NSTimer scheduledTimerWithTimeInterval:.2 
           target:self selector:@selector(delayed) 
           userInfo:nil repeats:NO]; 
    } 
} 

- (void)delayed { 
    _delayTimer = nil; 
    [self doSomething:_scrollView.contentOffset]; 
} 
0

你將不得不按照你想要的方式過濾結果。我在webView中執行相同的操作,將動畫頻率從60赫茲改爲30赫茲。在我的例子中,我們每0.03秒使用scrollviewDidScroll結果。這可以修改爲任何你想要的數量。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    static NSDate *date; 
    if(!date) 
     date = [NSDate date]; 

    //Check if we have gone long enough since the last desired update 
    if([[NSDate date] timeIntervalSinceDate:date] > .03) 
    { 
     //Enough time has passed, do your updates here 
     date = [NSDate date]; 
    } 
} 
+0

這是一個糟糕的主意,你會錯過一些事件,並不能保證你的控制器狀態是最後的滾動值。即如果視圖在0.03秒內滾動,則只會丟失數據。即使.03不是那麼多,取決於他想做什麼,它可能很重要 –

+0

@VincentG這是真的。但他說他參加的活動太多了。這是一種減少他「看到」的事件數量的方法。這些事件仍然會發生,但他只會「看到」他們的一小部分(這是他所要求的)。這與你的答案几乎相同,但不太複雜。 – Putz1103