gpt4 book ai didi

iphone - 如何控制 UISlider Value Changed-events 频率?

转载 作者:可可西里 更新时间:2023-11-01 06:16:39 26 4
gpt4 key购买 nike

我正在编写一个 iPhone 应用程序,它使用两个 uisliders 来控制使用 coreBluetooth 发送的值。如果我快速移动 slider ,一个值会在接收器处卡住,大概是因为 Value Changed 事件触发得如此频繁,以至于写入命令堆积起来并最终被丢弃。如何确保事件不会触发得太频繁?

编辑:

这里是对问题的澄清;蓝牙连接每 105 毫秒发送一次命令。如果用户在那段时间生成一堆事件,他们似乎会排队。我想丢弃连接事件之间生成的任何值,每 105 毫秒发送一个值。

这基本上就是我现在正在做的事情:

-(IBAction) sliderChanged:(UISlider *)sender{

static int8_t value = 0;
int8_t new_value = (int8_t)sender.value;

if ( new_value > value + threshold || new_value < value - threshold ) {
value = new_value;
[btDevice writeValue:value];
}
}

我想问的是如何实现类似的东西

-(IBAction) sliderChanged:(UISlider *)sender{

static int8_t value = 0;

if (105msHasPassed) {
int8_t new_value = (int8_t)sender.value;

if ( new_value > value + threshold || new_value < value - threshold ) {
value = new_value;
[btDevice writeValue:value];
}
}
}

最佳答案

我想仍然触发它们是有意义的......我会在你的情况下做的是检查当前值和先前值之间的增量。例如:

  • 当前值 -> 5。
  • 下一个值 -> 6。
  • 增量 1

只是一些伪代码:

if(delta>5){
//do your stuff
}

我可能不会这样做,但是:

-(void)sliderValueChanged:(UISlider *)sender{
[self performSelector:@selector(removeAction:) withObject:sender afterDelay:0.3];
// Do your stuff
}

- (void)removeAction:(UISlider *)sender{
[sender removeTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];

[self performSelector:@selector(addAction:) withObject:sender afterDelay:0.3];
}

- (void)addAction:(UISlider *)sender{
[mySlider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
}

我没有对此进行测试,但我想你明白了。

关于iphone - 如何控制 UISlider Value Changed-events 频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11324359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com