减少UiLabel的更新

时间:2013-04-23 10:22:02

标签: ios objective-c jquery-animate uilabel

我今晚花了几个小时试图获得两个已经刷新的UILabel,因为手势被识别(基于translation.y和velocity.y)。在

if (recognizer.state == UIGestureRecognizerStateEnded)

我想在手势完成后动画UILabels刷新的减速动画。只需拨打

即可刷新UILabel
[self refreshLabels];

今晚我花了很多时间尝试使用.contentOffset.y的无限scrollView和跟踪器来实现这一点。我还尝试在上面的if语句中使用动画块执行for和while循环,但也没有用。

有人在此之前有任何建议吗?

1 个答案:

答案 0 :(得分:0)

如何使用performSelector:withObject:afterDelay递归调用refreshLabels:?

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

示例代码:

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