【问题标题】:Simulate UIScrollView Deceleration模拟 UIScrollView 减速
【发布时间】:2013-08-26 17:34:41
【问题描述】:

我有一个UIPanGestureRecognize,我用它来更改视图的框架。当手势状态为UIGestureRecognizerStateEnded 时,有没有办法模拟UIScrollViewUITableView 的减速?这是我当前的代码:

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
                     }
                 }];
}

但这不是一个流畅的滚动。我想要一些能减速直到停止到我设定的点的东西。谢谢

【问题讨论】:

    标签: ios objective-c uiscrollview uigesturerecognizer


    【解决方案1】:

    WWDC 2012 的第 223 场会议,“使用滚动视图增强用户体验”,介绍了一种使用滚动视图的行为和“感觉”来为不同视图的位置设置动画的方法(用户实际上无法看到滚动视图) .

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

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

    【讨论】:

    • 我很高兴这个在 2013 年对你们有用,但如果您在此处添加一些实际代码,这将是一个更好的答案,因为现在视频不可用,即使它是可用的,我在工作时观看它会很不舒服。
    • 对我来说会话似乎现在可用。它基本上说你应该在某个地方放置一个不可见的滚动视图,在应该可滚动的区域放置一个简单的 UIView,并采用该滚动的平移手势并将它们重新附加到简单视图。然后有一个滚动委托,您可以将其偏移,这将像普通滚动视图一样减速。我不知道我刚刚看了什么,这太荒谬了 imo
    【解决方案2】:

    您必须提出某种算法来根据手势的速度计算您希望视图停止的位置,可以这样获得:

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

    从那里开始,只需将您的视图动画化到其计算出的静止位置并添加动画即可到达那里。我相信UIViewAnimationOptionCurveEaseOut 在这里很合适。

    【讨论】:

    • 我确切地知道我希望它停止的点。没有必要计算它。但是,您给了我一个更改动画选项的好主意。 UIViewAnimationOptionCurveEaseInOut 为我工作。
    • @Jeff 添加的第二个答案是更好的方法。
    猜你喜欢
    • 2013-04-29
    • 2010-11-09
    • 1970-01-01
    • 2011-01-03
    • 2011-08-27
    • 2013-01-15
    • 1970-01-01
    • 2011-05-07
    相关资源
    最近更新 更多