3
我想知道是否有任何方法可以獲得contentOffset
的更準確版本,或者估計/計算UIScrollView
的contentOffset
或(最好是)contentOffset
的一階導數。我試圖在我的UIScrollView
的contentOffset
的變化率非常小時執行操作,但0.5f不夠精確。UIScrollView:更準確/更精確的contentOffset值?
任何幫助,非常感謝。
我想知道是否有任何方法可以獲得contentOffset
的更準確版本,或者估計/計算UIScrollView
的contentOffset
或(最好是)contentOffset
的一階導數。我試圖在我的UIScrollView
的contentOffset
的變化率非常小時執行操作,但0.5f不夠精確。UIScrollView:更準確/更精確的contentOffset值?
任何幫助,非常感謝。
你不能得到比contentOffset
提供的更好的精度。直接使用此類別
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
static CGFloat prevPos = 0.0; //you can store those in iVars
static NSTimeInterval prevTime = 0.0;
CGFloat newPos = scrollView.contentOffset.y;
NSTimeInterval newTime = [NSDate timeIntervalSinceReferenceDate];
double v = (newPos - prevPos)/(newTime - prevTime);
prevPos = newPos;
prevTime = newTime;
}
但是,如果你感覺非常哈克,你希望你的代碼是不安全,你可以窺視UIScrollView
的速度高德:你可以使用常規ds/dt
方程來計算速度
@interface UIScrollView(UnsafeVelocity)
- (double) unsafeVerticalVelocty;
@end
@implementation UIScrollView(UnsafeVelocity)
- (double) unsafeVerticalVelocty
{
double returnValue = 0.0;
id verticalVel = nil;
@try {
verticalVel = [self valueForKey:@"_verticalVelocity"];
}
@catch (NSException *exception) {
NSLog(@"KVC peek failed!");
}
@finally {
if ([verticalVel isKindOfClass:[NSNumber class]]) {
returnValue = [verticalVel doubleValue];
}
}
return returnValue;
}
@end
爲了獲得水平速度與_horizontalVelocity
取代_verticalVelocity
。請注意,您將看到的值似乎有所不同。我再重複一次:雖然這可能是(可能)速度的最佳值,但它非常脆弱,並且不能適應未來發展。
好的。我認爲沒有任何安全的方法可以獲得更精確的價值,但是您的答案似乎涵蓋了任何人都可能需要解決的問題。非常感謝!不過,我會嘗試一下iVars的速度。 – RileyE
這可能是一個愚蠢的問題,但你究竟如何處理速度以獲得精確的內容偏移?看起來你所做的任何計算都會讓你回到相同的不祥值。 –
你是對的。作者試圖獲得更精確的'contentOffset'讀數來計算*速度*,所以我的答案只是簡單地將中間人「contentOffset」全部削減 –