使用Pan GestureComponent,我试图拖动当前对象的第一个位置。为此,我做了:

首先,当状态开始时,我存储按钮的位置。

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer{

    CGPoint startlocation;

// Get Position X and Y
if (recognizer.state == UIGestureRecognizerStateBegan) {
    startlocation = [recognizer locationInView:self.view];
    NSLog(@"%f" @"-" @"%f", startlocation.x , startlocation.y);
}


当用户释放按钮(状态已结束)时,我想首先将按钮设置回去。

// Quand on lache le composant : Action de fin
if (recognizer.state == UIGestureRecognizerStateEnded)
{
NSLog(@"%f" @"-" @"%f", startlocation.x , startlocation.y);
recognizer.view.center = startLocation;
}


NSLog:

状态开始:

76.000000-158.000000


状态端:

0.000000--1.998666


我有个问题。我的按钮在屏幕外侧。我不知道为什么startLocation的X和Y被修改了?

最佳答案

您正在谈论两件事:


触发平移手势的触摸位置recognizer locationInView
视图的位置(如果使用框架原点或中心,则不说)


目前尚不清楚您要做什么,但您需要决定,是否要通过平移手势转换来移动目标视图:

if (recognizer.state == UIGestureRecognizerStateBegan) {
   startLocation = targetView.center;
}

CGPoint translation = [recognizer translationInView:self.view];

CGPoint newCenter = startLocation;
newCenter.x += translation.x;
newCenter.y += translation.y;

targetView.center = newCenter;


或者您试图将目标视图捕捉到平移手势位置

targetView.center = [recognizer locationInView:self.view];


所有这些都假定目标视图是self.view的直接子视图。

10-05 21:13
查看更多