如何在 UIPanGestureRecognizer 方法中获取当前触摸点和上一个触摸点?

Posted

技术标签:

【中文标题】如何在 UIPanGestureRecognizer 方法中获取当前触摸点和上一个触摸点?【英文标题】:How to get current touch point and previous touch point in UIPanGestureRecognizer method? 【发布时间】:2012-11-07 12:45:09 【问题描述】:

我是 ios 新手,我在我的项目中使用 UIPanGestureRecognizer。在拖动视图时,我需要获取当前的接触点和上一个接触点。我正在努力获得这两点。

如果我使用touchesBegan 方法而不是使用UIPanGestureRecognizer,我可以通过以下代码得到这两点:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    CGPoint touchPoint = [[touches anyObject] locationInView:self];
    CGPoint previous=[[touches anyObject]previousLocationInView:self];

我需要在UIPanGestureRecognizer事件触发方法中得到这两点。我怎样才能做到这一点?请指导我。

【问题讨论】:

【参考方案1】:

你可以用这个:

CGPoint currentlocation = [recognizer locationInView:self.view];

如果没有找到,则通过设置当前位置并每次添加当前位置来存储以前的位置。

previousLocation = [recognizer locationInView:self.view]; 

【讨论】:

【参考方案2】:

当您将UIPanGestureRecognizer 链接到 IBAction 时,每次更改都会调用该操作。手势识别器还提供了一个名为state 的属性,它指示它是第一个UIGestureRecognizerStateBegan、最后一个UIGestureRecognizerStateEnded 还是只是UIGestureRecognizerStateChanged 之间的一个事件。

要解决您的问题,请尝试以下方法:

- (IBAction)panGestureMoveAround:(UIPanGestureRecognizer *)gesture 
    if ([gesture state] == UIGestureRecognizerStateBegan) 
        myVarToStoreTheBeganPosition = [gesture locationInView:self.view];
     else if ([gesture state] == UIGestureRecognizerStateEnded) 
       CGPoint myNewPositionAtTheEnd = [gesture locationInView:self.view];
       // and now handle it ;)
    

你也可以看看名为translationInView:的方法。

【讨论】:

【参考方案3】:

如果你不想存储任何东西,你也可以这样做:

let location = panRecognizer.location(in: self)
let translation = panRecognizer.translation(in: self)
let previousLocation = CGPoint(x: location.x - translation.x, y: location.y - translation.y)

【讨论】:

【参考方案4】:

UITouch中有一个函数可以获取视图中的上一次触摸

(CGPoint)locationInView:(UIView *)view; (CGPoint)previousLocationInView:(UIView *)view;

【讨论】:

【参考方案5】:

您应该按如下方式实例化您的平移手势识别器:

UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];

那么你应该将 panRecognizer 添加到你的视图中:

[aView addGestureRecognizer:panRecognizer];

- (void)handlePan:(UIPanGestureRecognizer *)recognizer 方法将在用户与视图交互时被调用。在handlePan: 中,你可以得到这样的触摸点:

CGPoint point = [recognizer locationInView:aView];

还可以获取panRecognizer的状态:

if (recognizer.state == UIGestureRecognizerStateBegan) 
    //do something
 else if (recognizer.state == UIGestureRecognizerStateEnded) 
   //do something else

【讨论】:

以上是关于如何在 UIPanGestureRecognizer 方法中获取当前触摸点和上一个触摸点?的主要内容,如果未能解决你的问题,请参考以下文章

在QGIS中如何添加天地图的WMTS

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?