我使用這種方法:滾動型更新
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
,我讓我的滾動視圖偏移的更新。問題是我的滾動視圖經常更新自己。有沒有辦法縮短更新間隔?
我使用這種方法:滾動型更新
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
,我讓我的滾動視圖偏移的更新。問題是我的滾動視圖經常更新自己。有沒有辦法縮短更新間隔?
下面是一個使用定時器來實現這一草案:
- (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];
}
你將不得不按照你想要的方式過濾結果。我在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.03秒內滾動,則只會丟失數據。即使.03不是那麼多,取決於他想做什麼,它可能很重要 –
@VincentG這是真的。但他說他參加的活動太多了。這是一種減少他「看到」的事件數量的方法。這些事件仍然會發生,但他只會「看到」他們的一小部分(這是他所要求的)。這與你的答案几乎相同,但不太複雜。 – Putz1103
什麼是你想達到與?這是完全okey,你得到它每一次,當滾動視圖didScroll –
不,但你可以fitler它自己。保持你使用的最後一個值的時間,並在獲得新值時比較你的實際時間... –
使用'NSTimer'來累積消息,有大量的例子在做這個。 –