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”全部削减 –