UIViewに接続されているUIPanGestureRecognizerがあります。私がやろうとしているのは、基本的にバケツにドラッグアンドドロップすることです。ユーザーがUIViewを手放し、それがバケットにない場合は、元の開始位置にアニメーションで戻す必要があります。UIPanGestureRecognizerに呼び出されるセレクターは次のとおりです。
- (void)handleDragDescriptionView:(UIPanGestureRecognizer *)gestureRecognizer {
UIView *panViewPiece = [gestureRecognizer view];
CGRect originalFrame = CGRectMake(946, 20, 58, 30);
CGPoint translation = [gestureRecognizer translationInView:panViewPiece];
if (gestureRecognizer.state == UIGestureRecognizerStateBegan || gestureRecognizer.state == UIGestureRecognizerStateChanged) {
panViewPiece.center = CGPointMake(panViewPiece.center.x + translation.x, panViewPiece.center.y + translation.y);
[gestureRecognizer setTranslation:CGPointZero inView:panViewPiece.superview];
}
else if (gestureRecognizer.state == UIGestureRecognizerStateCancelled) {
[UIView animateWithDuration:0.25 animations:^{
self.dragDescriptionView.frame = originalFrame;
}];
}
else {
[UIView animateWithDuration:0.25 animations:^{
self.dragDescriptionView.frame = originalFrame;
}];
}
}
originalFrame
メソッドの先頭にないでこれを実行できるかどうか疑問に思いました。私はもともと持っていた
CGRect originalFrame = _dragDescriptionView.frame;
ハードコーディングの代わりに、しかしそれはスナップバックしません。ドラッグしながらその値を更新しているためか。値のハードコーディングは特に好きではありませんが、これを回避する方法があるかどうかはわかりませんでした。ありがとう!