我今晚花了几个小时试图获得两个已经刷新的UILabel,因为手势被识别(基于translation.y和velocity.y)。在
if (recognizer.state == UIGestureRecognizerStateEnded)
我想在手势完成后动画UILabels刷新的减速动画。只需拨打
即可刷新UILabel[self refreshLabels];
今晚我花了很多时间尝试使用.contentOffset.y的无限scrollView和跟踪器来实现这一点。我还尝试在上面的if语句中使用动画块执行for和while循环,但也没有用。
有人在此之前有任何建议吗?
答案 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