OurTodo 子任务功能:我们如何用简单手势解决复杂任务管理难题

在 OurTodo 开发过程中,我们注意到一个有趣的现象:用户的大任务往往会一直停留在清单里,直到过期。 为什么?因为当一个任务包含 10+ 个步骤时,大脑会本能地感到焦虑。我们需要的不是一个更好的待办清单,而是一个能把大任务"拆解"成可执行步骤的工具。 这就是我们开发子任务功能的初衷。

我们观察到的用户痛点

通过用户反馈和数据分析,我们发现三个典型场景:
  1. 项目管理场景:"准备产品发布会"这种大任务,用户不知道从哪里开始
  2. 学习计划场景:"学习 React"看起来遥不可及,用户容易放弃
  3. 旅行准备场景:"准备日本旅行"包含太多细节,用户担心遗漏
共同的问题是:任务太复杂,认知负担太重

我们的设计思路:降低认知负担

我们的核心设计理念是:把模糊的焦虑,变成清晰的行动步骤

为什么选择"向右滑动"?

在 iOS 原生交互中,滑动是最自然的操作之一:
  • 左滑通常代表"删除"或"不感兴趣"
  • 右滑通常代表"更多操作"或"展开"
我们选择了向右滑动作为触发子任务的手势,原因很简单:
  • 符合用户的直觉习惯
  • 不会干扰主流程(查看任务)
  • 操作简单,零学习成本

技术实现挑战

在实现这个功能时,我们面临几个技术挑战:

1. 数据结构设计

Task {
  id: String
  title: String
  isCompleted: Boolean
  subtasks: [Subtask]  // 子任务数组
}

Subtask {
  id: String
  title: String
  isCompleted: Boolean
  parentTaskId: String
}
我们采用嵌套数组结构,而不是平铺结构,因为:
  • 数据关联更清晰
  • UI 渲染更直观
  • 性能更好(减少数据库查询)

2. 手势识别优化

iOS 的 UISwipeGestureRecognizer 配置:
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe))
swipeRight.direction = .right
taskCell.addGestureRecognizer(swipeRight)
我们调整了手势的触发阈值,确保:
  • 不会误触发(滑动距离太短)
  • 不会太难触发(滑动距离太长)
  • 触觉反馈提供即时确认

3. UI 层级展示

子任务需要与主任务视觉上明确区分:
  • 缩进:子任务向右缩进 20pt
  • 字号:子任务使用较小的字号(15pt vs 17pt)
  • 颜色:未完成的子任务使用灰色,完成后显示删除线

我们的核心功能特性

1. 独立的勾选机制

子任务可以单独标记完成,不影响主任务的状态。这很重要,因为:
  • 用户可以逐步完成大任务
  • 每完成一个子任务都有成就感
  • 主任务的进度感很直观

2. 进度可视化

我们在 UI 上实现了进度指示:
  • 完成的子任务显示删除线
  • 主任务旁显示完成进度(如 "3/5")
  • 所有子任务完成后,主任务可一键完成

3. 层级清晰

主任务和子任务视觉上明确区分,避免混淆:
  • 主任务:大字号、加粗、左侧无缩进
  • 子任务:小字号、正常字重、左侧缩进

我们的使用场景示例

场景 1:项目管理

📦 准备产品发布会
  ├─ 确定发布会日期和场地 ✅
  ├─ 准备演示 PPT(第 1 版)✅
  ├─ 录制产品演示视频
  ├─ 邀请媒体和 KOL
  ├─ 准备发布会后的社交媒体内容
  └─ 跟进参会者反馈

场景 2:学习计划

📚 学习 React
  ├─ 学习 JSX 基础 ✅
  ├─ 掌握 State 和 Props ✅
  ├─ 理解 Hooks
  ├─ 实战小项目
  └─ 阅读官方文档

场景 3:旅行准备

✈️ 准备日本旅行
  ├─ 办理签证 ✅
  ├─ 预订机票 ✅
  ├─ 预订酒店 ✅
  ├─ 规划行程
  ├─ 购买 JR Pass
  └─ 准备随身 WiFi

我们的性能优化

为了确保子任务功能的流畅体验,我们做了几个性能优化:

1. 懒加载

只有当用户展开子任务时,才从数据库加载子任务数据。这大大减少了初始加载时间。

2. 本地缓存

子任务数据在本地 SQLite 数据库缓存,即使离线也能查看和管理。

3. 增量更新

当用户勾选/取消子任务时,只更新这一条子任务的状态,而不是重新加载整个任务列表。

我们的用户反馈

子任务功能上线后,我们收到了很多正面反馈:

"终于可以把大任务分解了!以前看到'准备旅行'就头大,现在可以一步步来,心理负担小多了。" —— 用户 A

"子任务的进度显示很有成就感,看着一条条被划掉,真的很爽。" —— 用户 B

"向右滑动手势太自然了,完全不需要学习成本。" —— 用户 C

我们的下一步计划

基于用户反馈,我们计划在未来版本中添加:
  1. 多层级子任务:支持子任务的子任务(最多 3 层)
  2. 拖拽排序:支持拖拽调整子任务顺序
  3. 子任务模板:为常见场景(如旅行准备)提供预设模板
  4. 智能提醒:基于子任务优先级自动设置提醒时间

写在最后

子任务功能不是一个花哨的黑科技,但它解决了一个真实存在的大问题:如何把"想做"变成"能做",再变成"在做"。 我们相信,最好的工具应该是无感的——它不会让你感受到它的存在,只是悄悄地帮你把复杂的事情变简单。 如果你也有"大任务焦虑症",试试 OurTodo 的子任务功能吧:
  1. 把你的大任务写下来
  2. 向右滑动,添加 3-5 个子任务
  3. 只专注于第一个子任务
  4. 完成一个,勾选一个,继续下一个
  • 你会发现: 那些看起来不可能完成的任务,就这样一步步被搞定了。

OurTodo 子任务功能:把复杂任务变简单,从向右滑动开始。
分享
Twitter Facebook