2つのuislidersを使用してcoreBluetoothを使用して送信される値を制御するiPhoneアプリを作成しています。スライダーをすばやく動かすと、レシーバーで1つの値がフリーズします。これは、値の変更イベントが頻繁にトリガーされるため、書き込みコマンドがスタックして最終的に破棄されるためと考えられます。イベントが頻繁にトリガーされないようにするにはどうすればよいですか?
編集:
これが問題の明確化です。Bluetooth接続は105msごとにコマンドを送信します。その間にユーザーが一連のイベントを生成した場合、それらはキューに入れられているように見えます。接続イベント間に生成された値をすべて破棄し、105ミリ秒ごとに1つ送信したいと思います。
これは基本的に私が今していることです:
-(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];
}
}
}