我使用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)];
}
}
我尝试使用图层设置视图的位置,我也尝试使用不同持续时间的动画设置框架,但所有内容都表现相同。知道为什么会出现这种延迟吗?
答案 0 :(得分:40)
使用UILongPressGestureRecognizer
并将minimumPressDuration
设置为0.0
。这会立即识别并获得所有相同的更新,包括UIGestureRecognizerStateChanged
和更新的位置。
答案 1 :(得分:2)
如果是手势,GestureRecognizer无法确定手指移动一些像素。我不知道确切的公差值,但这就是你感到延迟的原因。
文档:
平移手势是连续的。当允许的最小手指移动到足以被视为平移时开始。
如果您想要即时移动,则可能需要使用touchesMoved:
构建自己的逻辑。
另一种方法可以是动画到第一个被识别的点。但这并没有消除延迟。 对于这种方法,您可以查看我在github上的JDDroppableView。
答案 2 :(得分:2)
如果你只使用常规touchesBegan,Moved和Ended,我发现响应速度更快。我甚至将UIGestureRecognizer子类化,并且它仍然在平移手势上有延迟。即使UIGestureRecognizer中的touchesBegan会按时触发,状态改变也需要半秒才能改变其状态......使用普通的旧TouchesBegan似乎更快,特别是如果你的cpu做了很多事情
re.findall('url\(([^)]+)\)',target_text)