我有一个可以用手指拖动的UIView,我已经使用UIPanGestureRecognizer实现了。这允许我水平拖动视图;向左或向右。
我从UIPanGestureRecognizer接收以下状态时使用我的视图(使用translationInView:方法):
现在发生的事情是,一旦手指离开屏幕表面,视图就会停止移动,这会产生非自然效果。
我想要的是,拖动视图从状态UIGestureRecognizerStateEnded开始减速,顺利停止。
这种行为由UIScrollView类和子类(UIWebView,UITableView等)使用。
我已经通过计算速度,触摸发生的时间和停止距离等来尝试了几种方法。但老实说,我有一种无处可寻的感觉。我甚至尝试使用像Chipmunk这样的物理引擎。但我发现这对于我试图实现的目标来说很复杂,我很确定应该有更好的(如果不是更容易的话)解决方案。
非常感谢!
的Jérémy
答案 0 :(得分:1)
在您的手势识别器中,使其成为当您的手指离开屏幕时,您开始动画以继续滚动一小段,持续一段时间,并进行“缓出”过渡。
可能是这样的:
[UIView beginAnimations:@"FingerOff" context:nil];
[UIView setAnimationDuration:0.25f];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDelegate:self];
[UIView setAnimationCurve:UIAnimationViewEaseOut];
[myView setFrame:newFrame];
[UIView commitAnimation];
您可以将setFrame替换为其他内容 - 无论您想要如何滚动或查看 - 甚至可能是setCenter。使它比当前位置“进一步”滚动。