Кнопка уведомления и как оно выглядит на экране блокировки
🔥3
Это как Xcode уведомляет нас, о том, что мы делаем что-то не то. Происходит когда мы делаем “изменение UI во время изменения UI”.
Интересный цвет они подобрали😀
Интересный цвет они подобрали
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Проект 16 завершён, по итогу получилось такое приложение!
Сделал задания челенжа:
🟢 Добавить иконку на Everyone таб, который будет отражать добавлен ли он в Contacted или нет
🟢 Возможность редактировать записи - имя и емейл
🟢 Сортировка по имени или емейлу - оказалось самое сложное, т.к. SwiftData Query не реагирует на изменения сортировки. Получилось решить это следую подсказке из https://www.hackingwithswift.com/quick-start/swiftdata/how-to-dynamically-change-a-querys-sort-order-or-predicate где предлагается вынесение списка в отдельную View, и передачу сортировки туда как параметр
Причем я обратил внимание, что при изменении сортировки SwiftUI пересоздаёт ProspectListView, но если я редактирую какую-нибудь запись - пересоздания нет, причем запись ставится на правильную позицию в списке, и он остаётся правильно отсортированным.
Сделал задания челенжа:
var body: some View {
NavigationStack {
ProspectListView(filter: filter, sort: sortOrder)
.navigationTitle(title)
.toolbar {
ToolbarItem(placement: .topBarTrailing) {
Menu("Sort", systemImage: "arrow.up.arrow.down") {
Picker("Sort", selection: $sortOrder) {
Text("Sort by Name")
.tag(SortDescriptor(\Prospect.name))
Text("Sort by email")
.tag(SortDescriptor(\Prospect.emailAddress))
}
}
}
}
}
}
Причем я обратил внимание, что при изменении сортировки SwiftUI пересоздаёт ProspectListView, но если я редактирую какую-нибудь запись - пересоздания нет, причем запись ставится на правильную позицию в списке, и он остаётся правильно отсортированным.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
HotProspects-test.png
689.3 KB
Тест сдал на отлично 🥳
Попробовать можно тут https://www.hackingwithswift.com/review/ios-swiftui/hot-prospects
Попробовать можно тут https://www.hackingwithswift.com/review/ios-swiftui/hot-prospects
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🆒2💯1
Проект 17 (день 86)
Новый проект - новые горизонты ⛵
86 день открывает тайны жестов (gestures), чуть больше чем обычные нажатия (taps).
▶️ Двойной тап, нажание (long press), минимальное время нажания, щипок (magnify gesture), поворот (rotate gesture). Не очень большой, но уже внушительный список разнообразных жестов. А так же различные настройки жестов
Как утверждает автор, заигрываться с этим не стоит, т.к. пользователь должен интуитивно понимать интерфейс. Полностью согласен, и даже более чем: по опыту - мало кто вообще осваивает хоть какие-то жесты в приложениях для более комфортного использования. Поэтому впервую очереь базовый функционал!
▶️
SwiftUI👶 💪
#hackingwithswift
Новый проект - новые горизонты ⛵
86 день открывает тайны жестов (gestures), чуть больше чем обычные нажатия (taps).
highPriorityGesture
, simultaneousGesture
, pressGesture.sequenced(before: dragGesture)
. Напоминают мне игру Fruit NinjaКак утверждает автор, заигрываться с этим не стоит, т.к. пользователь должен интуитивно понимать интерфейс. Полностью согласен, и даже более чем: по опыту - мало кто вообще осваивает хоть какие-то жесты в приложениях для более комфортного использования. Поэтому впервую очереь базовый функционал!
allowsHitTesting
- позволяет отключить tappable функциональность. Дополнительно рассматривали как ведут себя view обернутые в ZStack, VStack. К примеру, по умолчанию, Spacer
в VStack
не является кликабельным, но это можно испрваить указав .contentShape(.rect)
у VStack
SwiftUI
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Проект 17 (день 87)
Eщё один подготовительный, технический день:
▶️ Timer - механизм позволяющий выполнять переодические и (или) отложенные задачи. Интересно, что есть настройка tolerance, помогающая системе оптимизировать аккумулятор, откладывая вычисления.
▶️ ScenePhase - текущая состояние приложения, доступно через
▶️ Accessibility настройки, такие как accessibilityDifferentiateWithoutColor, позволяют настроить View под определенные запросы пользователя. Это не правило, которому нужно 100% придерживаться, а скорее рекомендация.
#hackingwithswift
Eщё один подготовительный, технический день:
@Environment(\.scenePhase) var scenePhase
, и позволяет понять когда пользователь, к примеру, свернул наше приложение.#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Media is too big
VIEW IN TELEGRAM
Проект 17 (день 88)
Приступили к реализации приложения. Используем полученные навыки, поэтому обойдёмся сегодня только видео🎥
Наконец-то свои карточки делаем😆
#hackingwithswift
Приступили к реализации приложения. Используем полученные навыки, поэтому обойдёмся сегодня только видео
Наконец-то свои карточки делаем
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Kotlin/Swift (iOS) Туда и Обратно
Проект 17 (день 88) Приступили к реализации приложения. Используем полученные навыки, поэтому обойдёмся сегодня только видео 🎥 Наконец-то свои карточки делаем 😆 #hackingwithswift
На видео заметны небольшие лаги. Сначала думал, что симулятор тормозит, но такое же поведение на реальном девайсе.
Что-то неправильно реализовано или это особенность SwiftUI DragGesture?👀
Что-то неправильно реализовано или это особенность SwiftUI DragGesture?
Please open Telegram to view this post
VIEW IN TELEGRAM
Проект 17 (день 89)
Сегодня в программе (всё можно увидеть на видео):
🟢 Цветные карточки при свайпе. Влево - 🔴 вправо - 🟢
При включенной опции accessibilityDifferentiateWithoutColor мы не красим карточки, а показываем индикаторы на экране куда смахивать правильные и куда неправильные карточки.
🟢 Таймер на экране и состояние активности приложения (когда можно смахивать карточки). Также когда приложение сворачивается - таймер останавливается. Если ничего не предпринимать, то несколько секунд будет потеряно, поскольку iOS не сразу останавливает таймер.
🟢 Финальный аккорд - кнопка перезапуска, если карточек больше не осталось.
Согласитесь классный курс?🤩
#hackingwithswift
Сегодня в программе (всё можно увидеть на видео):
При включенной опции accessibilityDifferentiateWithoutColor мы не красим карточки, а показываем индикаторы на экране куда смахивать правильные и куда неправильные карточки.
Согласитесь классный курс?
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Kotlin/Swift (iOS) Туда и Обратно
На видео заметны небольшие лаги. Сначала думал, что симулятор тормозит, но такое же поведение на реальном девайсе. Что-то неправильно реализовано или это особенность SwiftUI DragGesture? 👀
Если я правильно раскопал, это связано с тем, что
Думаю это можно исправить тем, что мы будем запоминать и считать дельту перемещения, и сбрасывать её в
Насколько это решение является хорошим и как обычно это делается? Т.к. похоже SwiftUI не позволяет это сделать даже с такой настройкой
DragGesture
применяется не сразу. Когда мы получаем уведомление onChanged
, оно уже содержит накопленное перемещение и поэтому получается эффект “прыжка” карточки.Думаю это можно исправить тем, что мы будем запоминать и считать дельту перемещения, и сбрасывать её в
onEnded
Насколько это решение является хорошим и как обычно это делается? Т.к. похоже SwiftUI не позволяет это сделать даже с такой настройкой
DragGesture(minimumDistance: 0)
👍1
Проект 17 (день 90)
90 день, время летит, знания прибавляются⏳
🟢 Пофиксили баги, оказывается они появляются не всегда просто так, а иногда намеренно, чтобы выучить новые уроки.
Самый забавный баг заключается в том, что не только верхнюю карточку можно смахнуть, но и любую другую из стека. В основном баги были связаны с accessibility. А так же с анимацией (не назвал бы это багом), добавили bounce анимацию, если карточка была недостаточно далеко отведена и отпущена.
🟢 Отдельная форма в конеце видео, позволяющая добавлять и удалять карточки. Делали это уже много раз.
Добавил карточки, которые, надеюсь, всем очевидны😆
#hackingwithswift
90 день, время летит, знания прибавляются
Самый забавный баг заключается в том, что не только верхнюю карточку можно смахнуть, но и любую другую из стека. В основном баги были связаны с accessibility. А так же с анимацией (не назвал бы это багом), добавили bounce анимацию, если карточка была недостаточно далеко отведена и отпущена.
Добавил карточки, которые, надеюсь, всем очевидны
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Приближаясь к последним 10 дням этого марафона хочется узнать, замотивировал ли я кого-то своим дневником?
Anonymous Poll
50%
Да, замотивировал, но пока не начал(а) 😉
50%
Да, замотивировал, начал делать что-то 🤩
0%
Нет, плохая мотивация 😕
0%
Нет, меня невозможно замотивировать 😆
Проект 17 (день 91)
Сегодня был день челенжа (доделывали прижение с карточками) и, как обычно, теоритический тест.
Из самостоятельных доделок:
➡️ Очищаю текстовые поля после добавления новой карточки
➡️ Пофиксил: если карточка была немного сдвинута вправо - при возвращении она становилась немного красной
➡️ При смахивании карточки влево, она возвращается обратно в стек. Это было самое сложное, т.к. пришлось переделать
#hackingwithswift
Сегодня был день челенжа (доделывали прижение с карточками) и, как обычно, теоритический тест.
Из самостоятельных доделок:
ForEach
, который был основан на индексах. А так же реализовал разные обработчики свайпа вправо и влево.#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1