我想知道是否有任何方法contentOffset
可以获得更准确contentOffset
的 当我的变化率非常小时,我试图执行一个动作,但是 0.5f 不够精确。contentOffset
UIScrollView
contentOffset
UIScrollView
任何帮助是极大的赞赏。
我想知道是否有任何方法contentOffset
可以获得更准确contentOffset
的 当我的变化率非常小时,我试图执行一个动作,但是 0.5f 不够精确。contentOffset
UIScrollView
contentOffset
UIScrollView
任何帮助是极大的赞赏。
您无法获得比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
要获得水平速度,请替换_verticalVelocity
为_horizontalVelocity
. 请注意,您将获得的值似乎以不同的方式缩放。我再重复一遍:虽然这(可能)是你能获得的最佳速度值,但它非常脆弱,而且不能保证未来的发展。