UIScrollView:更准确/精确的contentOffset值?

我想知道是否有任何方法可以获得更准确的contentOffset版本,或估计/计算contentOffset或(最好) UIScrollViewcontentOffset的一阶导数。 当我的UIScrollViewcontentOffset的变化率非常小时,我试图执行一个动作,但0.5f不够精确。

任何帮助是极大的赞赏。

您无法获得比contentOffset提供的精度更高的精度。 您可以使用常规ds/dt方程计算速度:

 - (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; } 

但是,如果您感觉非常hacky,并且您希望代码不安全 ,可以使用此类别直接查看UIScrollView的velocity iVars

 @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 。 请注意,您将获得的值似乎有不同的缩放比例。 我再一次重复:虽然这可能是(可能)速度的最佳值,但它非常脆弱而且不具备前瞻性。