Во время разработки OurTodo мы заметили интересный феномен: Большие задачи пользователей имеют тенденцию оставаться в списке до истечения срока их действия.
Почему? Потому что, когда задача содержит 10+ шагов, мозг инстинктивно чувствует тревогу. Нам нужен не лучший список дел, а инструмент, который сможет «разбить» большие задачи на выполнимые шаги.
Это наше первоначальное намерение разработать функцию подзадач.
OurTodo 子任务功能:把复杂任务变简单,从向右滑动开始。
Больные точки пользователей, которые мы наблюдали
Благодаря отзывам пользователей и анализу данных мы обнаружили три типичных сценария:- Сценарий управления проектом: «Подготовка к запуску продукта» — большая задача, и пользователи не знают, с чего начать
- Сценарий плана обучения: «Изучение React» кажется недостижимым, и пользователи легко сдаются
- Сцена подготовки к поездке: «Подготовка к поездке в Японию» содержит слишком много деталей, и пользователи боятся их пропустить
Наша идея дизайна: уменьшить когнитивную нагрузку
Наша основная концепция дизайна: Превратить смутное беспокойство в четкие действия。Почему стоит выбрать «Проведите пальцем вправо»?
в iOS При нативном взаимодействии пролистывание является одной из наиболее естественных операций:- Проведение влево обычно означает «удалить» или «не интересует»
- Пролистывание вправо обычно означает «больше операций» или «развернуть»
- Соответствует интуитивным привычкам пользователя
- Не будет мешать основному процессу (просмотр задач)
- Простое управление, нулевая стоимость обучения
Проблемы технической реализации
При реализации этой функции мы сталкиваемся с рядом технических проблем:1. Проектирование структуры данных
Task {
id: String
title: String
isCompleted: Boolean
subtasks: [Subtask] // 子任务数组
}
Subtask {
id: String
title: String
isCompleted: Boolean
parentTaskId: String
}
Мы используем структуру вложенного массива вместо структуры плиток, потому что: - Ассоциация данных становится более понятной
- Рендеринг пользовательского интерфейса становится более интуитивно понятным
- Повышается производительность (уменьшается количество запросов к базе данных)
2. Оптимизация распознавания жестов
iOSUISwipeGestureRecognizerКонфигурация: 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 слоев)Сортировка перетаскиванием
: Поддержка перетаскивания для настройки порядка подзадач
Шаблоны подзадач
: Предоставление предустановленных шаблонов для распространенных сценариев (например, путешествия) подготовка)
Умные напоминания- : Автоматически устанавливать время напоминаний в зависимости от приоритетов подзадачНаписано в конце
- Функция подзадач — это не причудливая черная технология, но она решает настоящую большую проблему: Как превратить «хочу сделать» в «могу сделать», а затем в «делаю»
- Мы считаем, что лучший инструмент должен быть нечувствительным
- - оно не даст вам ощутить свое существование, а просто незаметно поможет сделать сложные вещи проще. Если у вас также есть «тревога перед большой задачей», попробуйте функцию подзадач OurTodo: Запишите свои большие задачи
Проведите пальцем вправо и добавьте 3-5 подзадач
Сосредоточьтесь только на первой подзадачеЗавершите одну, отметьте одну и перейдите к следующейВы обнаружите:Эти, казалось бы, невозможные задачи решаются шаг за шагом. Функция подзадачи OurTodo: упрощайте сложные задачи, начните с пролистывания вправо.- 把你的大任务写下来
- 向右滑动,添加 3-5 个子任务
- 只专注于第一个子任务
- 完成一个,勾选一个,继续下一个
- 你会发现:那些看起来不可能完成的任务,就这样一步步被搞定了。
OurTodo 子任务功能:把复杂任务变简单,从向右滑动开始。
Поделиться