慣性スクロールをドラッグしてシミュレートする必要があるオブジェクトがあります。
これは私がこれまでに持っていたもので、動作が遅いです。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInNode:self];
self.lastTouch = touchLocation;
self.lastTimestamp = event.timestamp;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentLocation = [touch locationInNode:self];
// how much it scrolled vertically (it is a table view, no need to scroll horizontally)
CGFloat deltaY = currentLocation.y - self.lastTouch.y;
// move the container (that is the object I want to implement the inertial movement)
// to the correct position
CGPoint posActual = self.container.position;
posActual.y = posActual.y + deltaY;
[self.container setPosition:posActual];
// calculate the movement speed
NSTimeInterval deltaTime = event.timestamp - self.lastTimestamp;
self.speedY = deltaY / deltaTime;
self.lastTouch = currentLocation;
self.lastTimestamp = event.timestamp;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
CGFloat tempoDecay = 0.4f;
CGPoint finalPosition = self.container.position;
finalPosition.y = finalPosition.y + (self.speedY * tempoDecay);
// move the object to the final position using easeOut timing...
}
これが私が見るものです:私はそれをスワイプします。指を離すと加速して急に止まる。speedY 値をログに記録しましたが、その値は 720 のように計り知れません! (毎秒720ピクセル?)
Apple が提供する UIScrollView やその他のメソッドを使用できません。それ自体が慣性でスクロールしなければならないオブジェクトです。ありがとう。