2013-04-23 88 views
0

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

if (recognizer.state == UIGestureRecognizerStateEnded) 

我想在手势完成后动画UILabels刷新的减速。该UILabels只是通过调用

[self refreshLabels]; 

我花了很多时间试图今晚与惨败的.contentOffset.y的无限滚动视图和跟踪为此刷新。我还尝试在上面的if语句中使用for和while循环来创建动画块,该动画块也不起作用。

有没有人有任何建议/做过之前呢?

回答

0

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

当手势结束时,设置一个私人计数器并调用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