UIScrollView:更准确/精确的contentOffset值?
我想知道是否有任何方法可以获得更准确的contentOffset
版本,或估计/计算contentOffset
或(最好) UIScrollView
的contentOffset
的一阶导数。 当我的UIScrollView
的contentOffset
的变化率非常小时,我试图执行一个动作,但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
。 请注意,您将获得的值似乎有不同的缩放比例。 我再一次重复:虽然这可能是(可能)速度的最佳值,但它非常脆弱而且不具备前瞻性。