向我的应用程序提供数据的服务器最近添加了一项功能,允许您执行基本日志记录,例如"用户选择的徽标"或"用户正在退出"。
我唯一想要使用它的地方是在一个带有几个滑块的页面中,这些滑块可以对输入值进行计算。这是连续的,它会在您移动滑块时重新计算输出。
这使我无法在 时调用此日志记录方法。我不想每次数字改变时都打电话给我,否则我会谋杀服务器。我现在可以用"计算"按钮,但这会杀死我喜欢的整个无模式UI。
有没有一种方法可以合并呼叫,所以在5秒内进行的所有呼叫只会导致对工作方法的一次调用?如果用户执行其他操作,例如导航或退出应用程序,我还必须强制触发该方法。
答案 0 :(得分:3)
您可以轻松地将NSTimer
添加到滑块的IBAction方法中。每次调用该方法时,都会使计时器失效并再次启动它。将分析调用放入计时器的操作方法中,只有在计时器实际完成时才会调用该方法。
例如:
@interface ViewController ()
@property (nonatomic) NSTimer *actionTimer;
@end
@implementation ViewController
- (IBAction)sliderChanged:(UISlider *)sender
{
[self.actionTimer invalidate];
NSLog(@"Slider value: %f", sender.value);
self.actionTimer = [NSTimer scheduledTimerWithTimeInterval:2
target:self
selector:@selector(timerCompleted)
userInfo:nil
repeats:NO];
}
- (void)timerCompleted
{
NSLog(@"Timer completed.");
}
@end
答案 1 :(得分:0)
当输出值稳定时,观察计算值的后台线程如何通过在后台线程上调度块来触发更新,如
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(showValue:)
name:@"showValue"
object:nil];
您还可以在viewWillDisappear
中安排阻止视图和(我认为)退出事件。