如何控制 UISlider Value Changed 事件频率?

2023-12-31

我正在编写一个 iPhone 应用程序,它使用两个 uislider 来控制使用 coreBluetooth 发送的值。如果我快速移动滑块,一个值会在接收器处冻结,大概是因为“值更改”事件触发得太频繁,导致写入命令堆积起来并最终被丢弃。如何确保事件不会频繁触发?

Edit:

这是对问题的澄清;蓝牙连接每 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。
  • Delta 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];   
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何控制 UISlider Value Changed 事件频率? 的相关文章

随机推荐

  • Linux C++:如何跨多个文件正确使用模板专业化?

    我有一个奇怪的问题 在 Windows 上 使用 Visual Studio 2010 以及 Intel 编译器 一切都按预期链接 但是 当我尝试在 Linux 上使用 CLang 3 0 编译代码时 它会编译 如果我只使用单个 CPP 文
  • 如何测量 Android wifi 连接中的上传/下载速度和延迟

    我需要一些 api 或操作代码 通过它们我可以测量 android 应用程序的上传 下载速度和 wifi 连接的延迟 您使用的是 2 2 Froyo 或更高版本吗 如果是这样 请在您的应用程序中导入流量统计信息 并在您的应用程序使用互联网时
  • C# 数据绑定不更新 WPF

    我正在尝试在后面的 C 代码而不是 XAML 中进行数据绑定 在 Expression Blend 2 中创建的 XAML 绑定到我的 CLR 对象工作正常 我的 C 实现仅在应用程序启动时更新 之后对 CLR 的后续更改不会更新我的标签内
  • php 抓取并输出给定​​标签中的特定值或数字

    所以我对 php 很陌生 但在一些帮助下 我已经弄清楚如何抓取具有像 h1 class 这样的标签标识符的网站 更好的是 我已经弄清楚如何输出我想要的精确单词或值 只要它由空格分隔即可 例如 如果给定的标签名称 的输出为 30 个球 我可以
  • Android:当我在片段附近使用它时,在 runOnUiThread 附近出现错误

    我是 Android 开发新手 我想将按钮与动画链接起来 我在附近遇到错误runOnUiThread and getApplication 当我将其添加为一项活动时 这很好 但是当在MainFragment它给出了错误 但是 当我修复错误时
  • 如何在 Windows 中通过鼠标挂钩设置光标位置?

    我正在尝试创建一个小应用程序 它将检测鼠标光标何时移动到屏幕边缘并将其移动到相对的边缘 以创建连续的桌面效果 如果有意义的话 下面是其他人的一些代码 鼠标钩子部分 我通过添加 SetCursorPos 来将鼠标暂时移动到固定位置 当我运行它
  • 部署到 Lightsail 实例失败,因为找不到适合您的部署组的实例

    继自马西的回答 https stackoverflow com a 64170933 5675325 我继续尝试使用他提到的步骤 调整区域 从 GitHub 进行部署 但我得到了 部署失败 因为没有找到您的实例 部署组 检查您的部署组设置以
  • xamarin VisualStudio for ios 中没有附加设备

    当我尝试使用 Visual Studio 中的 IOS 模拟器时 我遇到了真正的麻烦 所以我使用xamarin 最新稳定版本 在VS中创建了一个hello world应用程序 我将项目设置为主项目 当我刷新与mac的连接时 我无法选择应该在
  • 如何为 HWIOAuthBundle 编写用户提供程序

    我想通过社交网络编写一个登录功能 如果用户未登录 则将其保存到数据库中 如果用户存在 则登录该用户 我应该在我的提供商中写入什么内容 文件状态 该捆绑包需要一个能够根据以下内容加载用户的服务 oauth 端点的用户响应 如果您有定制服务 应
  • 将 KeyEvent 对象列表转换为字符串

    我正在开发一个需要能够使用外部 USB 或蓝牙键盘楔的应用程序 然后 我捕获 KeyEvent 并根据需要缓存它们 开始 结束标记 因此 此时我有需要将其转换为字符串的 KeyEvent 列表 所以我需要将这些有序的 KeyEvent 转换
  • 使用 Ganglia 进行 Spark 监控

    我正在测试 Apache Spark 框架 我需要监视有关集群的某些方面 例如网络和资源 Ganglia 看起来是满足我需要的一个不错的选择 然后 我发现Spark支持Ganglia Spark监控网页上有这样的信息 要安装 Ganglia
  • 谷歌云功能美国中部时区?

    我想知道什么时区云函数代码会像 EST CST MST PST 这样运行 我部署了函数来获取它 但它返回了2018 12 05T17 54 00 207Z并且不应用任何美国时区 不是在美国运行吗 export const dateLog f
  • vb.net 从通配符获取文件名列表

    我有字符串 c debug txt 在 Debug 文件夹中有几个 txt 文件 例如 test1 txt test2 txt test3 txt 如何从此字符串 c debug txt 获取通配符文件数组 a 0 c debug test
  • 快速搜索排序向量中大于 x 的最小值

    快速意味着比 O N 更好 这与 find 的能力一样好 我知道有ismembc and ismembc2 但我认为它们都不是我正在寻找的 我阅读了文档 他们似乎正在寻找会员equal到 x 但我想要索引第一个值较大 than x 现在如果
  • C++ Boost read_json 崩溃,我有 #define BOOST_SPIRIT_THREADSAFE

    最近其他人升级了我们的 boost 库 现在当 read json 函数被大量调用时我会看到这个 coredump 以前从未见过这个 我在代码中有 define BOOST SPIRIT THREADSAFE 这就是为什么以前没有发生这种情
  • TomEE + CXF配置参考

    所以我试图找到任何参考文档或使用这三个的重要示例 我发现的 最好的 是 TomEE OpenEJB JAXRS 重构 http rmannibucau wordpress com 2013 01 09 tomeeopenejb jaxrs
  • VS 2019 自定义 ASP.NET Core 项目模板

    我试图弄清楚如何 或者是否 可以创建一个自定义 Visual Studio 项目模板 该模板挂钩到 Visual Studio 2019 中可用的现有 ASP NET Core Web 应用程序模板 我想做的是类似于 madskristen
  • 使用 ApplicationViewBoundsMode.UseCoreWindow Windows Phone 8.1 时显示状态栏

    我的 Windows Phone 8 1 应用程序底部位于软件导航键下方 我用ApplicationViewBoundsMode UseCoreWindow使页面停留在软件导航键上方 但结果是页面的内容到达了状态栏下方 状态栏变得透明 有什
  • 禁用 Chromium Embedded 3 (DCEF3) 中的上下文菜单

    我试图在 Chromium Embedded DCEF3 窗口中禁用鼠标右键 上下文菜单 但我没有得到 我没有找到任何设置来本地执行此操作 例如 我可以禁用 查看源代码 我正在使用下面的代码 但我真正想要的是禁用上下文菜单 或者不希望它出现
  • 如何控制 UISlider Value Changed 事件频率?

    我正在编写一个 iPhone 应用程序 它使用两个 uislider 来控制使用 coreBluetooth 发送的值 如果我快速移动滑块 一个值会在接收器处冻结 大概是因为 值更改 事件触发得太频繁 导致写入命令堆积起来并最终被丢弃 如何