模拟UIScrollView减速

时间:2013-08-23 15:34:53

标签: ios objective-c uiscrollview uigesturerecognizer

我有UIPanGestureRecognize我用它来改变视图的框架。当手势状态为UIScrollView时,有没有办法模拟UITableViewUIGestureRecognizerStateEnded的减速度?这是我目前的代码:

if (panGesture.state == UIGestureRecognizerStateEnded)
{
    [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
    self.view.frame = CGRectMake(182, 0, self.view.frame.size.width, self.view.frame.size.height);
}
                 completion:^(BOOL finished) {
                     if (finished) {
                        //Do something
                     }
                 }];
}

但这不是一个平滑的卷轴。我希望减速直到它停止到我设定的位置。感谢

2 个答案:

答案 0 :(得分:14)

WWDC 2012上的会议223,“使用滚动视图增强用户体验”,介绍了使用滚动视图的行为和“感觉”来设置不同视图位置的动画(没有滚动视图实际上对用户可见)的方法

会话中显示的方法的好处是,您的减速将始终与UIScrollView匹配,现在和永远。

https://developer.apple.com/videos/wwdc/2012/?id=223

答案 1 :(得分:0)

你必须想出某种算法,根据手势的速度来计算你希望视图停在哪里,这可以像这样得到:

CGPoint velocity = [panGesture velocityInView:panGesture.view];

从那里它应该只是将你的视图动画到其计算的休息位置并添加动画来实现它。我相信UIViewAnimationOptionCurveEaseOut适合这里。