使用UIPanGestureRecognizer移动对象时为什么会出现延迟

Mic*_*ael 16 iphone delay ios uipangesturerecognizer

我正在使用UIPanGestureRecognizer移动UIView对象 - 我在屏幕上拖动手指多少,我将视图向同一方向移动(仅在X - 左或右,Y不变).它工作正常,但延迟(非常明显).

以下是处理UIPanGestureRecognizer事件的方法:

-(void)movePages:(UIPanGestureRecognizer *)sender
{
    if(switchingMode == 1){
        if([sender state] == UIGestureRecognizerStateBegan){
            fingerStartPosition = [sender locationInView:self.view].x;
            viewStartPosition = [[viewControllers objectAtIndex:activeViewControllerIndex] view].center;
        }
        [[[[viewControllers objectAtIndex:activeViewControllerIndex] view] layer] setPosition:CGPointMake(viewStartPosition.x - (fingerStartPosition - [sender locationInView:self.view].x) , viewStartPosition.y)];

    }
}
Run Code Online (Sandbox Code Playgroud)

我试图使用它的图层设置视图的位置,我也尝试使用具有不同持续时间的动画设置框架,但一切都表现相同.知道为什么会出现这种延迟吗?

Der*_*way 41

使用a UILongPressGestureRecognizer并设置minimumPressDuration0.0.这可以立即识别并获得所有相同的更新,包括UIGestureRecognizerStateChanged更新的位置.

  • 您还需要将`UILongPressGestureRecognizer`的'allowableMovement`设置为`CGFloat.infinity`.否则,拖动一小段距离(10pt)后手势将自动取消. (4认同)
  • 但是使用这个解决方案,你不会有 `translation(in:)` 方法,这就是我们需要 `UIPanGestureRecognizer` 的原因:/ (3认同)