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
이것은 바보 같은 질문 일지 모르지만 정확한 콘텐츠 오프셋을 얻기 위해 속도와 정확히 무슨 상관이 있습니까? 당신이 계산하는 계산이 똑같은 정확하지 않은 값으로 되돌아 가게 될 것 같습니다. –
당신은 절대적으로 옳습니다. 저자는 * velocity *를 계산하기 위해 더 정확한 'contentOffset' 판독 값을 얻으려고 시도했기 때문에 내 대답은 단순히 중개자와'contentOffset '을 모두 잘라 버렸습니다. –