0

今晚我花了几个小时试图让我拥有的两个 UILabel 在识别手势时已经被刷新(基于translation.y 和velocity.y)。在里面

if (recognizer.state == UIGestureRecognizerStateEnded)

我想在手势完成后对 UILabels 的刷新减速进行动画处理。UILabel 只需调用

[self refreshLabels];

今晚我花了很多时间尝试使用无限滚动视图和 .contentOffset.y 的跟踪器来做到这一点,但失败得很惨。我还尝试在上面的 if 语句中使用一个也不起作用的动画块执行 for 和 while 循环。

有没有人有任何建议/做过这个?

4

1 回答 1

0

使用 performSelector:withObject:afterDelay: 递归调用 refreshLabels 怎么样?

当手势结束时,设置一个私有计数器并调用 refreshLabels。在 refreshLabels 中,使用计数器作为“所用时间”变量计算简单的减速曲线,并将结果值用作下一次递归调用的延迟。

示例代码:

int counter;  // Set this value to 1 when the gesture completes

- (void)refreshLabels:(id)sender{
    // Update the labels using whatever code you have

    // This code will execute the recursive deceleration
    if (counter > -1){
        float somereasonablenumber = 0.1F;
        float delaytime = (1.0-0.1)/counter; // deceleration = (finaltime-initialtime)/timetaken
        counter++;
        if (delaytime > somereasonablenumber){
            [self performSelector:@selector(refreshLabels:) withObject:nil afterDelay:delaytime];
        } else {
            counter = -1;
        }
    }

}

您可能需要使用我用于 finaltime 和 initialtime 的值来获得您想要的曲线。现在,此代码将在延迟曲线上执行,例如:

0.9s
0.45s
0.3s
0.225s
0.18s
0.15s
0.128571429s
0.1125s
于 2013-04-23T11:23:12.093 回答