0

我在单元格中添加了一个 UIPanGestureRecognizer,允许用户水平滑动它。当单元格 x 原点超过 50 时,我希望单元格移动得更慢,例如 UIScrollView 限制发生的情况,但是我遇到了一个问题:单元格没有按照应有的方式跟随我的手指。

我在屏幕上从左向右滑动手指多次,当我完成单元格时,它位于与起始位置不同的位置。

这是我用来移动单元格的代码(我的猜测是我在达到 50 时创建弹性效果的方式有问题):

- (void)slideCell:(UIPanGestureRecognizer *)panGestureRecognizer {
    CGFloat horizontalTranslation = [panGestureRecognizer translationInView:self].x;

    if (panGestureRecognizer.state == UIGestureRecognizerStateChanged) {
        CGFloat retention = 1;

        if (self.frame.origin.x > 50) retention = 5;

        [self setCenter:CGPointMake(self.center.x+horizontalTranslation/retention, self.center.y)];
    }

    [panGestureRecognizer setTranslation:CGPointZero inView:self];
}
4

1 回答 1

0

问题是您一直将平移重置为零,因此您失去了有关用户触摸移动的绝对距离的知识。如果您更改算法以便根据平移设置框架而不重置(绝对平移),那么当您向后拖动时,您的计算将是准确的。


尝试不同的算法,尝试类似:

CGFloat tx = [panGestureRecognizer translationInView:self].x;

[self setCenter:CGPointMake(originalCenter.x + (tx - (tx > 50 ? sqrt(tx - 50) : 0)), originalCenter.y)];

如果减速太快,请尝试使用powf,以便您可以指定因子。

于 2013-10-19T22:46:35.267 回答