iOS アプリのビューに UIPanGestureRecognizer をアタッチしています。パン ハンドラーのコードをTouches サンプル アプリからコピーしました。ジェスチャが開始すると、私のコード:
- 元のアンカー ポイントと中心を記録します。
次のように、アンカー ポイントと中心をユーザーの指の周りに変更します。
CGPoint locationInView = [gestureRecognizer locationInView:target]; CGPoint locationInSuperview = [gestureRecognizer locationInView:target.superview]; target.layer.anchorPoint = CGPointMake( locationInView.x / target.bounds.size.width, locationInView.y / target.bounds.size.height ); target.center = locationInSuperview;
ジェスチャが進行するにつれて、パン ハンドラーは指の動きを追跡するために中心を継続的に変更します。ここまでは順調ですね。
ユーザーが手放したら、ビューをアニメーション化して元の開始点に戻します。これを行うコードは次のようになります。
[UIView animateWithDuration:2 delay:0 options:UIViewAnimationCurveEaseOut animations:^{
target.center = originalCenter;
target.layer.anchorPoint = originalAnchorPoint;
}];
そして、それはビューをアニメーション化して元の開始点に戻します。ただし、アニメーションが開始する前に、ビューは UI の別の場所にジャンプします。IOW、手放すとジャンプし、元の場所にアニメーションで戻ります。
おそらく、アニメーションの外側にアンカーポイントと中心を設定する必要があると思いました。おそらく、ジェスチャーが始まるときのように、中心をスーパービューの場所に設定する必要があると思いましたが、それは違いはないようです.
ここで何が欠けていますか?ユーザーが手放したときにジャンプを防ぐにはどうすればよいですか?