iOS拨轮交互实现:UIScrollView吸附+Haptic Feedback,3秒录入血压数据

PCIe-4.2.3.2 Processing of Ordered Sets During Flit Mode Data Stream 动态门控检测(Gated Detection):绝不能在非预定时钟周期进行全时段 OS 匹配。这能节省大量动态功耗。并行容错比较器:必须实现 64-bit 宽的容错匹配器(5/8 表决),这对时序(Timing)要求较高,需要考虑多级流水线(Pipeline)设计。变长状态机(Variable Length FSM):SKP 子状态机必须具有Count_8B计数器,并且要有上限强退保护(Max Count = 6)。控制信号广播。 阅读详情

起因:给我爸做一个能用的血压记录工具

去年我爸确诊高血压,医生让每天记录。试了七八个 App,要么界面复杂老人不会用,要么每次录入要点太多下。有一次他直接拿纸笔记了,复诊时掏出一张皱巴巴的纸条递给医生。

我当时就决定自己做一个。做出来叫「健康手账」,iOS 上架快半年了,版本 1.1。核心就解决两件事:录入太慢、数据到了手机里医生看不到。

拨轮交互:UIScrollView + 吸附 + Haptic Feedback

这是我花时间最多的地方。数字键盘录入血压太慢了——高压、低压、心率三个值,每个都要点三四下,老人容易按错还得删。

我的方案是模拟物理转盘的阻尼感,用 UIScrollView 做环形滚动区域,通过自定义吸附逻辑实现「转到哪停到哪」:

func scrollViewWillEndDragging(_ scrollView: UIScrollView, 
    withVelocity velocity: CGPoint,
        targetContentOffset: UnsafeMutablePointer<CGPoint>) {
            let cellHeight: CGFloat = 44.0
                let targetY = targetContentOffset.pointee.y
                    let snappedY = round(targetY / cellHeight) * cellHeight
                        targetContentOffset.pointee.y = snappedY
                            // 触觉反馈,模拟刻度感
                                UIImpactFeedbackGenerator(style: .light).impactOccurred()
                                }
                                ```
加了 Haptic Feedback 之后,转动时有轻微震动,我爸说「跟拧收音机一样」。实测录一条血压(高压+低压+心率)大概 3 秒,比键盘快 3-4 倍。

试过三种方案才定下来:UIPickerView 太丑定制性差;CollectionView 横向滚动手感不对;最后用竖向 ScrollView+吸附才满意。中间删了两千行代码。

## PDF 就医报告:UIGraphicsPDFRenderer + 自动分页

这个功能的场景很具体——我爸每次复诊,医生问「最近血压怎么样」,他就说「还行」。我想让他直接递一张纸给医生,上面有趋势图和表格。

技术上用 UIGraphicsPDFRenderer 渲染,难点在分页——数据多了表格要自动换页,行不能从中间截断。核心判断逻辑大概是这样:

```swift
func renderTableRows(_ rows: [RowData], in context: UIGraphicsPDFRendererContext) {
    var currentY: CGFloat = pageMarginTop
        for row in rows {
                let rowHeight = calculateHeight(for: row)
                        // 剩余空间不够一整行,强制换页
                                if currentY + rowHeight > pageHeight - pageMarginBottom {
                                            context.beginPage()
                                                        currentY = pageMarginTop
                                                                    drawTableHeader(at: &currentY) // 新页重绘表头
                                                                            }
                                                                                    drawRow(row, at: &currentY)
                                                                                        }
                                                                                        }
                                                                                        ```
关键是换页后要重绘表头,不然医生翻到第二页看不懂列代表什么。上次复诊医生扫了一眼说「这个整理得清楚」,算是验证了方向。

## 多人档案:Core Data 用 parent entity 隔离数据

支持建多个档案,我手机里有三个:我爸、我妈、我自己。

数据层用 Core Data,多档案隔离的方式是在 schema 里加了一个 `Profile` entity 作为 parent,所有的 `BloodPressureRecord`、`WeightRecord`、`StatusStamp` 都通过 relationship 挂在某个 Profile 下面。查询的时候用 NSPredicate 按 profile 过滤:

`NSPredicate(format: "profile == %@", currentProfile)`

没用多个 persistent store 的方案——太重了,而且将来如果做导出功能,单个 SQLite 文件比较好处理。

所有数据存在本地,没有服务器没有账号。健康数据太敏感,我不想碰用户隐私,也不想维护后端。代价是没法跨设备同步,但对于「每天固定用一台手机记录」的场景够用。

## 状态印章:离散事件和时间序列数据的关联

除了数值记录,做了一组状态印章——吃药、运动、饮酒、熬夜。每天点一下,像盖章。

数据模型上,`StatusStamp` 是独立 entity,字段很简单:`type`(枚举)、`timestamp`、`profile`。它和 `BloodPressureRecord` 没有直接 relationship,关联展示是在趋势图渲染时按时间轴做的——取当天的所有 stamp,在折线图对应日期的 X 轴位置画小图标。

这样做的好处是 stamp 和数值记录完全解耦,将来加新的 stamp 类型不需要动血压/体重的 schema。坏处是查询「吃药日 vs 未吃药日的血压均值对比」时要在内存里做 join,数据量大了可能有性能问题——不过对于个人用户,几年的数据量也就几千条,目前没遇到瓶颈。

## 目前状态

- 2024 年上架,当前版本 1.1
- - 买断制,不搞订阅。慢病记录这种东西用户可能用好几年,订阅不公平
- - 下载量说实话不多,没怎么推广过
- - 日活不高但留存还行——毕竟是每天都要用的工具
- - 鸿蒙版在计划中,ArkUI 写数据录入界面应该挺合适
## 一个想讨论的问题

做这种长期记录类工具 App,你们会选 Core Data 还是 SQLite(比如 GRDB/FMDB)?

我选 Core Data 主要因为和 NSFetchedResultsController 配合做列表刷新很省事,iCloud 同步将来也有现成方案。但也遇到了烦心事——轻量级迁移(lightweight migration)在加新 entity 时没问题,改字段类型就容易翻车,有一次测试阶段数据全丢了。如果用 SQLite 自己管 schema 版本,至少迁移逻辑是透明可控的。

你们怎么选的?有没有踩过类似的坑?
Marvell 88E6390x交换芯片:从零构建No-CPU模式网络交换系统 本文详细介绍了如何为Marvell 88E6390x以太网交换芯片构建No-CPU模式网络交换系统。通过解析其核心价值与硬件准备,并手把手指导使用CodeBlocks、IMPGUI和SwitchGUI等软件工具进行配置代码编写、镜像生成与烧录,最终实现交换芯片脱离外部CPU独立工作,适用于成本敏感、空间受限的嵌入式网络设备设计。 阅读详情

相关推荐

GT911触摸驱动避坑指南:从寄存器读取到多点触控处理的5个关键步骤详解

本文深入解析了GT911触摸驱动开发中的关键步骤与常见问题。从硬件初始化、I2C通信建立,到核心寄存器操作、缓冲区状态管理,再到配置表烧录与多点触控数据解析,提供了详尽的避坑指南。文章结合STM32等平台的实战代码,重点阐述了驱动调试中的时序、中断处理和坐标映射等核心要点,帮助开发者高效实现稳定可靠的多点触控功能。

weixin_29189363的博客 675

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 153

OI 生涯回忆录 《Pilgrimage》

前言 于 NOI2020 后写下本文。 本文简单提及了在写作时尚能回忆起来的,在我的 OI 生涯中对我的影响重大的人、事、比赛等。 写作本文,旨在在回忆允许的范围内,对 OI 生涯进行一定程度上的梳理,总结。 开端 入门 我最早接触计算机程序设计,是在小学。 那时候,我的数学成绩不错,就被老师推荐去学习编程。 就这样,我在局前街小学的何静老师的指导下,走上了编程的道路。 小学时的编程,与其说是 “竞赛” ,不如说是 “兴趣班” 。 当时,包括我在内,很多小孩子天性是浮躁的。支撑我对着无聊的代码学下去的,并不

cz_xuyixuan的博客 1万+

4G 功能机操作系统选型指南:KaiOS、Mocor、MAUI、PMAOS 的能力边界与验证方法

4G 功能机如何选择操作系统?本文梳理 KaiOS、Mocor、MAUI、PMAOS 四条路线的技术定位与能力边界,从市场认证、应用清单、芯片与 BSP、内存与整机成本、交付维护五个维度建立选型流程,并提供场景决策矩阵和签约前八项验证清单,帮助研发与产品团队区分平台宣称、演示能力与目标机型的实际交付能力。

PMAOS的博客 180

Kindle电子书DRM破解全攻略:从下载到转换的完整流程(含最新DeDRM插件配置)

本文详细介绍了如何合法移除个人购买的Kindle电子书的DRM保护,实现跨设备阅读与备份。核心内容包括使用最新DeDRM插件(如noDRM分支)配合Calibre进行配置,并针对亚马逊最新的KFX加密格式提供了密钥提取与实战操作指南。文章强调该方法仅适用于个人合理使用,旨在帮助读者真正掌控自己的数字资产。

delta的博客 574

Ubuntu 22.04 LTS下Xenomai 3.3实时内核配置全攻略(附常见错误排查)

本文详细介绍了在Ubuntu 22.04 LTS系统上配置Xenomai 3.3实时内核的完整流程,包括环境准备、内核补丁应用、编译优化及常见错误排查。特别针对工业自动化和机器人控制场景,提供了性能优化建议和故障解决方案,帮助开发者实现毫秒级精度的实时任务处理。

weixin_29268385的博客 463

芯参谋(83):AliOS Things_驱动开发指南

本指南针对AliOSThings驱动开发中的核心痛点,系统梳理了从硬件配置到组件交付的全流程。聚焦“初始化顺序”“分级加载”“CSI隔离”“VFS挂载”等关键问题,提供可照搬的八步开发流程、骨架代码与核查清单。通过明确驱动类型选择、组件化管理、板级静态配置(无DTS)及内核态/用户态运行模式,解决“驱动不注册”“open失败”“偶发死机”等典型难题。配套模板与实战案例,确保驱动可复现、可维护、可裁剪,适用于V3.x弹性微内核平台,助力开发者高效完成稳定可靠的外设驱动开发。

qq520131714的专栏 471

Frida提取Cocos游戏XXTEA密钥的实战方法论

XXTEA是一种轻量级分组加密算法,广泛用于移动端游戏通信保护;其128位密钥的安全性直接决定网络协议逆向成败。在Cocos引擎生态中,密钥常以静态常量、JNI动态传递或Native运行时派生三种形态存在,导致传统静态分析失效。Frida凭借跨Java/Native注入能力与内存实时观测优势,成为捕获密钥‘出生瞬间’的关键工具——尤其适用于hook xxtea_encrypt函数入口、监控JNI参数传递、设置内存断点追踪派生过程等场景。本文聚焦Cocos2d-x与Cocos Creator项目,覆盖从密钥识

weixin_33509600的博客 416

iOS 小组件开发,Windows 上用 KXBuild 加 WidgetKit 扩展 给 App 加 iOS 桌面小组件

iOS 小组件开发用 WidgetKit。这篇在 Windows 上用 KXBuild 的 add-target --type widget 给 SwiftUI 工程加一个桌面小组件扩展:写时间线和主屏小号/中号、锁屏圆形多种尺寸界面,用 App Group 和 App 共享数据,App 里调 WidgetCenter 主动刷新,按 F5 装到 iOS 17+ 的 iPhone 调试,再随 ipa 一起上架。以喝水打卡为例,附 App ID、描述文件准备和小组件不刷新、签名报错的排查。

2501_91600747的博客 181

26、电子测量与旋转编码器控制技术解析

本文深入解析了电子测量中的电感测量技术与旋转编码器的控制方法。介绍了LC电路振荡原理、滤波器类型及其应用,并通过代码实现了基于脉冲宽度的电感值计算。对比了陶瓷电容与电解电容在高频测量中的性能差异。在旋转编码器部分,详细阐述了其工作原理,提出了抖动问题和检测遗漏的解决方案,包括中断检测法和基于4位状态映射的高精度控制方法。文章还探讨了相关技术在电力系统、通信设备、工业自动化和智能家居中的应用,并展望了高精度、智能化、小型化和无线化的发展趋势,为电子系统设计提供了实用指导和技术参考。

elastic6hunter的博客 97

【3天快速入门WPF】从小白到新手入门教程

嘿,小伙伴们!如果你已经有一定的C#开发基础,但想快速掌握WPF开发,达到企业级水准,那接下来的这个三天快速入门计划绝对适合你!虽然听起来有点挑战,但别担心,只要跟着这个高强度、结构化的学习计划,你一定能搞定它。首先,我们得搞清楚,WPF的核心知识点到底有哪些。要想达到企业级开发水准,XAML、数据绑定、MVVM、控件使用、命令系统、样式模板这些统统都得拿下。听起来是不是有点多?别急,我们把任务分解到三天里,每天安排合理的内容,保证理论和实践相结合,让你学得扎实又高效。

Zy100Papa的博客 1422

安卓IOS打包证书

.p12 、 .mobileprovision 、 keystore 相关证书申请

weixin_58431406的博客 271

App 抓包难?Frida Hook 实战:绕过 SSL Pinning (证书绑定) 抓取某大厂 App 核心接口

当我们使用 Charles 抓包 HTTPS 时,本质上是实施了MITM(中间人攻击)。Charles 伪装成服务器,发给 App 一个自己的证书(伪造证书)。Charles 伪装成 App,拿着真正的证书去请求服务器。如果 App 只是简单校验“证书是否由受信任的 CA 签发”,那你把 Charles 的根证书安装到手机系统里,就能骗过它。但是,是 App 内置了服务器证书的Hash(指纹)。

BUG猿的博客 914

React Native项目开发(iOS侧为例)

本文基于React Native 0.71+,通过npx react-native init初始化项目后,详细讲解如何使用TypeScript搭建两个页面:入口页(Entrance.tsx)和我的页面(Profile.tsx)。重点介绍了配置tsconfig.json、初始化TypeScript环境、集成React Navigation实现页面跳转,并通过创建共享类型文件(navigation.ts)实现路由类型安全。文章还涵盖依赖安装、iOS构建问题排查、目录结构规范及常见错误解决方案。

D_xw_的博客 232

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

iOS 推送通知怎么实现,从 APNs p8 密钥到 iOS 真机收到第一条推送

iOS 推送通知要跑通,核心是 App ID 开通 Push Notifications 并重新生成描述文件、签名带上 aps-environment、再用 APNs 的 .p8 密钥签 JWT 把推送发到设备令牌。这篇用 KXBuild 按五步做:开能力、加 entitlements、代码里请求权限拿设备令牌、建 .p8 认证密钥、用一段 Node 脚本或 curl 走 HTTP/2 发测试推送,让 iPhone 弹出第一条通知。附拿不到令牌、APNs 报错码、TestFlight 收不到的排查。

2501_91591841的博客 216

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

[iOS]Runtime2

为了让你在父类中依然能访问当前对象(也就是子类的实例),编译器在底层会生成一个结构体,叫 : 当调用 时,底层调用的函数是 : 拿着(也就是当前的子类对象)作为消息接收者,但是把方法查找的起点定位在了 (父类)这里需要注意的就是仍然是调用者自己,即先讲一下上篇没讲过的,我们如果缓存未命中,那我们就会进入慢速查找,现在我们来详细的讲解在进入慢速查找的瞬间会再看一遍方法列表,然后立刻调用加锁,因为多线程下别人正在动态添加方法或者扩容,不加锁会崩溃类就绪OC的机制就是在编译期只生成了 结构,当类首次被发送消息时(

wzm20070304的博客 213

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

React Native iOS 项目搭建

本文系统梳理了React Native iOS开发的环境检测与项目搭建全流程。强调环境问题占报错70%根因,需优先验证Node/npm、Watchman、Xcode工具链、模拟器运行时等关键项。通过官方CLI初始化项目,配合CocoaPods管理原生依赖,实现从环境验收到首跑成功的闭环。基于React Navigation构建双Tab嵌套导航,结合AsyncStorage实现本地持久化,完成用户列表、详情页、我的页等核心功能。最后提供调试技巧与高频报错解决方案,助力开发者高效落地RN项目。

D_xw_的博客 445

iOS App 图标、启动屏和多语言搭配 方法,上架前使用KXBuild一次做好 App 图标

上架前,iOS 的 App 图标、启动屏和多语言这三样配不齐,上传时就可能被拦或显示不对。这篇用 KXBuild 一次配好:图标只要一张 1024×1024、不带透明通道的 PNG,在资源目录编辑器里右键就生成全部尺寸,还支持 iOS 18 深色/着色和 Xcode 26 的 .icon;启动屏在 Info.plist 的 UILaunchScreen 填背景色和 Logo;界面文字、App 名称用 .xcstrings 翻译,商店信息再到 App Store Connect 按语言填。附上架前检查清单。

2501_91600889的博客 272

Appuploader 创建 iOS 描述文件详解,Development / Ad Hoc / App Store

搞不清 iOS 描述文件(Provisioning Profile)该选 Development、Ad Hoc 还是 App Store?本文讲清四种类型各装到哪、哪些要绑设备、能不能上架,重点辨析最容易混的 Development 与 Ad Hoc,说明设备或证书变动后为什么要重建、重建后要重新导入签名,并给出不用 Mac 在 Windows/Linux 上用 Appuploader 新建与重建描述文件的实操步骤,附装机"描述文件不匹配"等常见问题排查。

2501_91373349的博客 213

Windows 开发 iOS,Sign in with Apple 苹果登录,KXBuild 真机调试全流程

Sign in with Apple 接入分四步:App ID 开能力并重新生成描述文件,entitlements 加 com.apple.developer.applesignin,用 SignInWithAppleButton 拿 identityToken 交服务端验签,删账号时调 revoke。本文讲清审核指南 4.8 为什么要你提供它、姓名邮箱只给一次、用 user 当主键,并在 Windows 上用 KXBuild 真机测登录,附 1000 报错排查。

2501_91373349的博客 203

iOS 深度链接配置教程,URL Scheme 与 Universal Links,KXBuild 真机验证

深度链接两种:URL Scheme(myapp://)只改 Info.plist 的 CFBundleURLTypes;Universal Links(https://)要开 Associated Domains、在 entitlements 写 applinks 域名、网站放 /.well-known/apple-app-site-association。讲清两者怎么选、onOpenURL 处理代码,在 Windows 上用 KXBuild 装 Debug 包真机验证,附 CDN 缓存和十个不跳转排查。

2501_91600747的博客 257

手机远程控制电脑哪家强?2026年iOS/安卓/鸿蒙横评实测,ToDesk/向日葵谁更流畅

手机远程控制电脑已成刚需,ToDesk凭借全平台覆盖、低延迟、无广告、免费不限速等优势,成为最佳选择。其iOS、安卓、鸿蒙及Mac系统均支持,实测连接快、操作流畅,虚拟键盘、外接键鼠、互动批注等功能体验出色。相较之下,向日葵存在限时踢线、传输慢、广告多等痛点。选购建议:无论用何种手机,首选ToDesk,实现高效便捷的远程办公与协助。

lx08113的博客 268

go消息推送之极光推送 (JPush REST API + SDK,覆盖安卓与iOS)

使用 gorush有个绕不开的问题:国内安卓设备上 FCM 基本不可达,华为、小米、OPPO、vivo 各自为政——此时可用极光推送(JPush)作解决方案。它的思路和前面几家都不一样:App 集成极光 SDK 后拿到统一的 RegistrationID,服务端发一条 REST 请求,极光云端自动把消息路由到 APNs、各家厂商通道或极光自有长连接。这里给出了:一个用纯标准库直接调用极光的;另一个用社区维护的,类型化参数,接口注释与官方文档逐条对应。两个功能相同,可放在一起对比学习。

qq_40467670的博客 156

芯参谋(92):XTX_存储器件跨RTOS移植速查

本文为XTX SDNAND与SPINOR在FreeRTOS、RT-Thread、AliOSThings、Zephyr四类RTOS上的跨平台移植速查指南。核心结论:SDNAND本质为带控制器的贴片SD卡,均通过各自系统SD/MMC协议栈+FatFs实现,关键在打通SDIO/SPI并挂载文件系统;SPINOR则依赖各系统串行闪存框架(如SFUD、jedec,spi-nor),难点在于型号自动识别。对比显示,RT-Thread与Zephyr因支持自动识别与开箱即用,移植效率最高;FreeRTOS与AliOS需手动

qq520131714的专栏 662

Linux-iostat命令详解

Linux命令学习记录

m0xin的博客 87

线程同步和互斥

生产者和消费者彼此之间不直接通讯,而是通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于⼀个缓冲区,平衡了生产者和消费者的处理能力。<3>当线程A执行完临界区的代码,将1写入到内存mutex中,此时唤醒线程B,线程B执行到exchgb就可以申请到锁了,调度到线程A,线程A就要阻塞等待。结论:若当前线程正在执行临界区的代码被切换走,此时不会还锁,会带走锁,调度到其他线程,会申请不到锁,阻塞等待。

qq_71009995的博客 243
上一篇: 独立开发订阅管理App技术复盘:SwiftData踩坑、周期换算与风险检测
下一篇: 独立开发了一个把专注计时做成「护照」的 iOS App,聊聊成长系统建模和灵动岛踩的坑
SameX-4869
博客等级 码龄17年 3354粉丝 657原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值