そのため、UIView の開始位置を保存して、作成したブロックが正しい位置に配置されていない場合にその位置にスナップバックできるようにしようとしています。「startPoint」という CGPoint を作成しました。その座標をブロックの開始点に設定したいと思います。ブロックを取得すると、ブロックを離すと、画面上の 0,0 座標 (左上) に移動します。何が欠けているのか正確にはわかりません。任意の助けをいただければ幸いです。以下は、gestureRecognizer のコードです。
- (void)pan:(UIPanGestureRecognizer *)gestureRecognizer {
UIView *view = [gestureRecognizer view];
CGPoint startPoint;
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
view.backgroundColor = [UIColor redColor];
startPoint = [gestureRecognizer translationInView:self.view];
}
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
CGPoint translation = [gestureRecognizer translationInView:view.superview];
view.center = CGPointMake(view.center.x+translation.x, view.center.y+translation.y);
[gestureRecognizer setTranslation:CGPointZero inView:view.superview];
} else if ([gestureRecognizer state] == UIGestureRecognizerStateEnded) {
// double snapX = round(view.center.x / 110) * 110;
// double snapY = round(view.center.y / 110) * 110;
double snapX = round(startPoint.x);
double snapY = round(startPoint.y);
view.backgroundColor = [UIColor blueColor];
[UIView animateWithDuration:0.3 animations:^{
view.center = CGPointMake(snapX, snapY);
}];
}
}