a4b4f21701457cc5b0b52cda8759452a.jpg

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

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

Делиться

a4b4f21701457cc5b0b52cda8759452a

Недавно я начал заниматься виброкодингом, чтобы создавать веб-сайты и приложения для 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. Однако дизайн был ужасен:

2f6e8a38bbfa6142f7490827a66a5774

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

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

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

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

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

0adf19cfa707eb05dc4d16c83ef0e0cc

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

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

b2ea85541b1d5da0e5e082c2fe0da389

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

  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:

d3f5db9f1c3246835f582ac2ef6e3674

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

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

Я также хочу иметь 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 контролирует количество квадратов в ряду

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

666f7bb817f8733d121aa309f6b79cca

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

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

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

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

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

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

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

✅ Найденные теги: добавление, курсор, новая функция, пошаговый процесс, приложение iOS

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

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

галерея

Компания SpaceX может избежать экологических проверок, развернув миллион спутников.
Исследование Йельского университета показало, что стресс родителей может незаметно способствовать развитию детского ожирения.
Компания Smith+Nephew представила пенную повязку для профилактики пролежней.
ideipro logotyp
Недавно одобренный в Австралии ИИ для лечения рака легких и другие краткие обзоры | MobiHealthNews
STAT+: FDA присвоило статус «прорывного» чат-боту на основе генеративного искусственного интеллекта для хирургических пациентов.
Разработка кодекса поведения для клинических консультаций с использованием искусственного интеллекта.
Почему люди говорят громко по телефону в общественном транспорте
Прежде чем появятся квантовые вычисления, этот стартап хочет привлечь предприятия, которые уже используют эту технологию.
Image Not Found
Компания SpaceX может избежать экологических проверок, развернув миллион спутников.

Компания SpaceX может избежать экологических проверок, развернув миллион спутников.

Экологические последствия запланированной компанией SpaceX гигантской мегагруппировки спутников до сих пор изучаются, но Федеральная комиссия по связи (FCC) не обязана проводить их исследование. Компания SpaceX планирует запустить гораздо больше спутников. Чарльз Бойер / Фото из архива Alamy…

Мар 13, 2026
Исследование Йельского университета показало, что стресс родителей может незаметно способствовать развитию детского ожирения.

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

Исследование Йельского университета предполагает, что одним из часто упускаемых из виду способов борьбы с детским ожирением может быть снижение уровня стресса у родителей. (Фото: Shutterstock) В последние годы наблюдается рост детского ожирения. По данным Центров по контролю…

Мар 13, 2026
Компания Smith+Nephew представила пенную повязку для профилактики пролежней.

Компания Smith+Nephew представила пенную повязку для профилактики пролежней.

Компания Smith+Nephew сообщает, что повязка удерживает больше экссудата и предотвращает размножение более 99% бактерий. Фото: ARTFULLY PHOTOGRAPHER / Shutterstock.com. Компания Smith+Nephew представила свою пенную повязку Allevyn Complete Care, которая призвана обеспечить передовые решения для лечения ран и…

Мар 13, 2026
ideipro logotyp

Данные BridgeBio о мышечной слабости впечатляют в преддверии подачи заявки в FDA.

Компания BridgeBio Pharma сделала еще один шаг к потенциальному одобрению своего препарата-кандидата для лечения мышечной слабости BBP-418, сообщив о статистически значимых данных об эффективности на 3-й фазе клинических испытаний, которые аналитики сочли впечатляющими. Фармацевтическая компания сообщила, что…

Мар 13, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых