Функция подзадачи 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
}
Мы используем структуру вложенного массива вместо структуры плиток, потому что:
  • Ассоциация данных становится более понятной
  • Рендеринг пользовательского интерфейса становится более интуитивно понятным
  • Повышается производительность (уменьшается количество запросов к базе данных)

2. Оптимизация распознавания жестов

iOS UISwipeGestureRecognizerКонфигурация:
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe))
swipeRight.direction = .right
taskCell.addGestureRecognizer(swipeRight)
Мы скорректировали порог срабатывания жеста чтобы гарантировать, что:
  • не сработает случайно (расстояние смахивания слишком короткое)
  • активировать будет не так уж сложно (расстояние смахивания слишком велико)
  • тактильная обратная связь обеспечивает мгновенное подтверждение

3. Отображение иерархии пользовательского интерфейса

Подзадачи необходимо визуально четко отличать от основной задачи:
  • Отступ: Подзадачи имеют отступ вправо 20 пт | Это важно, потому что:
  • Пользователи могут Выполняйте шаг за шагом
  • Большие задачиКаждый раз, когда выполняется подзадача

Чувство выполненного долга

Ход выполнения основной задачи очень интуитивно понятен

2. Визуализация прогресса
  • Мы реализовали индикацию прогресса в пользовательском интерфейсе: Отображаются выполненные подзадачиЗачеркивание
  • Отображение рядом с основной задачейЗавершенный прогресс
  • (например, «3/5»)

После выполнения всех подзадач основную задачу можно выполнить одним щелчком мыши

3. Четкая иерархия
  • Основные задачи и подзадачи визуально четко разделены, чтобы избежать путаницы:Основная задача: крупный шрифт, жирный шрифт, без отступа слева
  • Подзадачи: мелкий шрифт, нормальная толщина шрифта, отступ слеваПример нашего сценария использованияСценарий 1: Управление проектом
  • Сценарий 2: План обучения

Сценарий 3: Подготовка к поездке

Оптимизация нашей производительности
  • По порядку Чтобы обеспечить бесперебойную работу функции подзадач, мы произвели несколько оптимизаций производительности:
  • 1. Отложенная загрузка

Данные подзадачи загружаются из базы данных только тогда, когда пользователь

разворачивает подзадачу

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

. Это значительно сокращает время начальной загрузки.

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

2. Локальный кеш

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

Данные подзадачи кэшируются в

локальной базе данных SQLite

, которую можно просматривать и управлять даже в автономном режиме.

3. Инкрементальное обновлениеКогда пользователь проверяет/отменяет подзадачу, отображается только статус этой подзадачи

обновляется вместо перезагрузки всего списка задач.

Наши отзывы пользователейПосле запуска функции подзадач мы получили много положительных отзывов: "Наконец-то я могу разбивать большие задачи! Раньше я расстраивался, когда видел "подготовьтесь к путешествию", но теперь я могу делать это шаг за шагом, и умственная нагрузка намного меньше." —— Пользователь А

"Отображение хода выполнения подзадач очень полезно, и очень приятно видеть, что элементы вычеркиваются". —— Пользователь Б

«Жест смахивания вправо настолько естественен, что обучение не требует никаких затрат». —— Пользователь CНаши следующие шагиОсновываясь на отзывах пользователей, мы планируем добавить в будущих версиях:

Многоуровневые подзадачи

: Поддержка подзадач подзадач (до 3 слоев)

Сортировка перетаскиванием

: Поддержка перетаскивания для настройки порядка подзадач

Шаблоны подзадач

: Предоставление предустановленных шаблонов для распространенных сценариев (например, путешествия) подготовка)

Умные напоминания
  1. : Автоматически устанавливать время напоминаний в зависимости от приоритетов подзадачНаписано в конце
  2. Функция подзадач — это не причудливая черная технология, но она решает настоящую большую проблему: Как превратить «хочу сделать» в «могу сделать», а затем в «делаю»
  3. Мы считаем, что лучший инструмент должен быть нечувствительным
  4. - оно не даст вам ощутить свое существование, а просто незаметно поможет сделать сложные вещи проще. Если у вас также есть «тревога перед большой задачей», попробуйте функцию подзадач OurTodo: Запишите свои большие задачи

Проведите пальцем вправо и добавьте 3-5 подзадач

Сосредоточьтесь только на первой подзадачеЗавершите одну, отметьте одну и перейдите к следующейВы обнаружите:Эти, казалось бы, невозможные задачи решаются шаг за шагом. Функция подзадачи OurTodo: упрощайте сложные задачи, начните с пролистывания вправо.
  1. 把你的大任务写下来
  2. 向右滑动,添加 3-5 个子任务
  3. 只专注于第一个子任务
  4. 完成一个,勾选一个,继续下一个
  • 你会发现:那些看起来不可能完成的任务,就这样一步步被搞定了。

OurTodo 子任务功能:把复杂任务变简单,从向右滑动开始。
Поделиться
Twitter Facebook