Архив рубрики ~Лента новостей~

Пошаговый процесс добавления новой функции в мое приложение iOS с помощью курсора

Пошаговый процесс добавления новой функции в мое приложение iOS с помощью курсора

Курсор хорош в написании кода, но не так хорош в дизайне.

Делиться

NOVOSTI

Недавно я начал заниматься виброкодингом, чтобы создавать веб-сайты и приложения для iOS. Два моих приложения уже доступны в App Store.

Моим первым приложением было Brush Tracker, которое помогает отслеживать ежедневную чистку зубов, поддерживать регулярность и поддерживать чистоту зубов с помощью небольших мотивирующих подталкиваний. Я также написал статью о всем процессе разработки приложения и его публикации в App Store.

Недавно я решил добавить в Brush Tracker новую функцию: сетку, похожую на календарь, которая показывает ежемесячную регулярность чистки зубов. В этой статье я расскажу, как я реализовал эту функцию с помощью курсора и нескольких внесенных мной вручную изменений.

Первоначальная подсказка

Я имел в виду что-то похожее на сетки, которые вы видите в приложениях для отслеживания привычек или на графике вклада на GitHub.

Я начал с режима «Планирование» в Cursor, который оказался очень эффективным при добавлении новой функции или внесении крупных изменений. Вы определяете функцию или объясняете задачу, а Cursor генерирует подробный план реализации.

Вот точная подсказка, которую я использовал в режиме планирования, чтобы начать:

Я хочу добавить сетку, похожую на календарь, для отслеживания дней, когда пользователь полностью чистит зубы. Создайте сетку с квадратами, каждый из которых соответствует дню в месяце. Изначально квадраты сетки чёрные. Закрасьте квадрат зелёным, если пользователь полностью чистит зубы, и светло-зелёным, если пользователь частично чистит зубы. Например, пользователь устанавливает количество ежедневных чисток 2. Если пользователь чистит зубы один раз в день, квадрат должен быть светло-зелёным. Если пользователь чистит зубы два раза в день, квадрат для этого дня должен быть зелёным. Сетка должна быть доступна по нажатию на значок календаря в левом верхнем углу экрана.

Cursor задал мне два вопроса, чтобы прояснить некоторые детали перед финализацией плана внедрения. Мне очень понравился этот шаг, потому что приятно видеть, что Cursor запрашивает разъяснения, а не делает предположения самостоятельно.

Курсор задал два вопроса:

  • Должна ли сетка календаря отображать только текущий месяц или разрешать навигацию между месяцами?
  • Стоит ли нам начать отслеживать с сегодняшнего дня или также показывать прошлые дни (которые будут черными)?

Я дал команду Cursor разрешить навигацию между месяцами и отображать предыдущие дни месяца чёрным цветом. Затем Cursor создал файл разметки с подробным планом внедрения.

В плане подробно объясняется, как будет реализована эта функция, а также приводится список подлежащих выполнению задач.

Элементы TODO курсора:

  • Расширьте BrushModel для отслеживания исторических данных о ежедневной чистке зубов с сохранением
  • Создать компонент CalendarGridView с сеткой месяцев и цветными квадратами
  • Добавить кнопку со значком календаря в верхний левый угол ContentView
  • Интеграция CalendarGridView с ContentView с использованием представления листа

Затем я попросил Cursor реализовать план. Он также позволяет изменять план перед выполнением, но я хотел сохранить исходную схему Cursor как есть.

Реализация заработала с первой попытки, и я смог протестировать функцию прямо в симуляторе Xcode. Однако дизайн был ужасен:

Примечание: все изображения, использованные в этой статье, включают скриншоты из моего приложения Brush Tracker.

Симулятор Xcode больше не включает настройки даты и времени, поэтому я изменил системную дату на своем Mac, чтобы проверить, как обновляются цвета сетки в разные дни.

Мне этот стиль совсем не понравился. Поэтому я попросил Курсора переделать сетку, используя следующую подсказку:

Нам нужно изменить дизайн сетки. Я имею в виду что-то вроде сетки вкладов на Github. Кроме того, не нужно отображать значения дней в квадратах, соответствующих дням.

Эта подсказка не сработала так, как я надеялся. Единственное изменение — удаление номеров дней:

Затем я поделился образцом желаемого мной стиля сетки и попросил Cursor создать похожий дизайн.

Новый дизайн был ближе к тому, что я задумал, но у него были структурные проблемы. Квадраты были слишком маленькими и плохо масштабировались в макете:

Итак, у этой конструкции есть две основные проблемы:

  1. Каждый месяц состоит из 42 квадратов (не представляющих дни какого-либо месяца).
  2. Квадратики слишком маленькие.

Я попросил Курсор исправить первую проблему с помощью этой подсказки:

В текущей реализации ноябрь и декабрь представлены 42 квадратами. Квадраты в сетке соответствуют дням месяца, поэтому их количество должно быть равно количеству дней в этом месяце.

Другая задача была проще, и её можно было решить, изменив значения некоторых параметров. Например, размер квадратов в сетке можно изменить с помощью параметра squareSize:

struct DaySquare: View { let isToday: Bool let isCurrentMonth: Bool let brushCount: Int let brushesPerDay: Int private let squareSize: CGFloat = 8 // изменить этот параметр

Вот как выглядит сетка после того, как я изменил размер квадрата до 32:

Другая проблема, которую можно решить путем корректировки значений параметров, — это заполнение между строками.

На скриншоте выше, похоже, нет пространства между строками. Это можно исправить, увеличив отступ между строками.

Я также хочу иметь 8 квадратов (т. е. дней) в ряду и изменить расстояние между рядами.

Все это можно сделать в следующем фрагменте кода:

// Календарная сетка — в стиле GitHub поменьше LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 0.2), count: 8), spacing: 0) { ForEach(Array(calendarDays.enumerated()), id: .offset) { index, dayInfo in DaySquare( isToday: dayInfo.isToday, isCurrentMonth: dayInfo.isCurrentMonth, brushCount: dayInfo.brushCount, brushesPerDay: model.brushesPerDay, size: 32 ) .padding(.bottom, 3) } }

  • интервал контролирует расстояние между квадратами в строке
  • padding управляет пространством между строками
  • count контролирует количество квадратов в ряду

Поэкспериментировав со значениями этих параметров в приведенном выше фрагменте кода, я получил следующую сетку:

Если пользователь выполнил все чистки зубов за день, он получает ярко-зелёный цвет. В случае частичного выполнения квадрат для этого дня окрашивается в бледно-зелёный цвет. Остальные дни отображаются чёрным цветом, а текущий день — белой рамкой.

После внедрения функции отслеживания прошлых дней, мне показалось естественным добавить уведомления о сериях. Я попросил Cursor сделать это, используя следующую подсказку:

Добавьте уведомления о завершении пользователем всех чисток за 10, 20 и 30 дней. Также добавьте ежемесячное уведомление о завершении всех дней месяца. Уведомления должны воодушевлять и мотивировать.

Созданная мной сетка не самый удачный дизайн, но она достаточно хороша, чтобы донести идею. Взглянув на неё, пользователь сразу получает представление о частоте чистки зубов.

С помощью Cursor и некоторых ручных настроек мне удалось реализовать и выпустить эту функцию за несколько часов. На момент написания статьи эта версия всё ещё находится на рассмотрении в App Store. К моменту прочтения статьи она, возможно, уже будет распространена. Вот ссылка на Brush Tracker в App Store, если хотите взглянуть на него или попробовать приложение.

Спасибо за прочтение! Если у вас есть отзывы о статье или приложении, мне будет интересно узнать ваше мнение.

Источник: towardsdatascience.com

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Архив рубрики ~Коротко из Telegram~ Нейронку БЕЗ ЦЕНЗУРЫ выпустили в открытый доступ — Gemma 4… Архив рубрики ~Коротко из Telegram~ Нашли комбайн для скачивания видео и музыки практически отовсюду —… Архив рубрики ~Коротко из Telegram~ Инструменты дня 🔍 Кьюи Перепроверяет ChatGPT, Claude и Gemini перед отправкой, потому… Архив рубрики ~Коротко из Telegram~ Kimi K3 нашла уязвимость в Redis за 27 минут Исследователь… Архив рубрики ~Коротко из Telegram~ Alibaba представила мощный движок синтеза речи Qwen-Audio-3.0-TTS Команда Qwen выпустила… Архив рубрики ~Коротко из Telegram~ Lightricks научила ИИ убирать лишних людей и машины с видео… Архив рубрики ~Коротко из Telegram~ Copilot теперь живет в «Проводнике» Windows 11 Microsoft продолжает встраивать… Архив рубрики ~Коротко из Telegram~ GitHub Copilot теперь поддерживает модель Gemini 3.6 Flash GitHub начал… Архив рубрики ~Коротко из Telegram~ Anthropic представила плагин Claude Security для поиска уязвимостей Anthropic выпустила… Архив рубрики ~Коротко из Telegram~ Cursor Router: снижение стоимости запросов к ИИ на 60% Команда… Архив рубрики ~Коротко из Telegram~ Российский разработчик СУБД Postgres Pro может сократить до 30% сотрудников…. Архив рубрики ~Коротко из Telegram~ Veon досрочно выкупил облигации на $886 млн, одновременно разместив новый… Архив рубрики ~Коротко из Telegram~ 💢 Иван Паломарес Каррaскоса (Machine Learning Mastery) разбирает пять стратегий… Архив рубрики ~Коротко из Telegram~ ✅ CEO Cloudflare Мэттью Принс на мероприятии Axios в Каннах… Архив рубрики ~Коротко из Telegram~ Нейронку БЕЗ ЦЕНЗУРЫ выпустили в открытый доступ — Gemma 4… Архив рубрики ~Коротко из Telegram~ Нашли комбайн для скачивания видео и музыки практически отовсюду —… Архив рубрики ~Коротко из Telegram~ Инструменты дня 🔍 Кьюи Перепроверяет ChatGPT, Claude и Gemini перед отправкой, потому… Архив рубрики ~Коротко из Telegram~ Kimi K3 нашла уязвимость в Redis за 27 минут Исследователь… Архив рубрики ~Коротко из Telegram~ Alibaba представила мощный движок синтеза речи Qwen-Audio-3.0-TTS Команда Qwen выпустила… Архив рубрики ~Коротко из Telegram~ Lightricks научила ИИ убирать лишних людей и машины с видео… Архив рубрики ~Коротко из Telegram~ Copilot теперь живет в «Проводнике» Windows 11 Microsoft продолжает встраивать… Архив рубрики ~Коротко из Telegram~ GitHub Copilot теперь поддерживает модель Gemini 3.6 Flash GitHub начал… Архив рубрики ~Коротко из Telegram~ Anthropic представила плагин Claude Security для поиска уязвимостей Anthropic выпустила… Архив рубрики ~Коротко из Telegram~ Cursor Router: снижение стоимости запросов к ИИ на 60% Команда… Архив рубрики ~Коротко из Telegram~ Российский разработчик СУБД Postgres Pro может сократить до 30% сотрудников…. Архив рубрики ~Коротко из Telegram~ Veon досрочно выкупил облигации на $886 млн, одновременно разместив новый… Архив рубрики ~Коротко из Telegram~ 💢 Иван Паломарес Каррaскоса (Machine Learning Mastery) разбирает пять стратегий… Архив рубрики ~Коротко из Telegram~ ✅ CEO Cloudflare Мэттью Принс на мероприятии Axios в Каннах…