Kotlin/Swift (iOS) Туда и Обратно
36 subscribers
127 photos
21 videos
9 files
84 links
Канал - журнал, рассказывающий об опыте изучения Swift & iOS backend-разработчиком на Java & Kotlin
Download Telegram
1 - интерполяция
2, 3 - кнопки для разного типа записей
4 - множественное редактирование
👍2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Небольшой прогресс с приложением DerDieDas
Добавил сюда отображение правильного артикля.

Правда у меня есть ощущение, что анимация отрабатывает не одинаково для обоих слов 🤔

Чтобы подебажить это, я увеличил duration анимации, но в замедленном варианте это ощущение пропадает.
Это обман зрения? И если да, то как его исправить, помимо отключения анимации 🤣
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Проект 16 (день 84)

Две темы сегодня:

➡️ Контекстное меню на изображении - добавили кнопку “пошарить” QR код. Делается это довольно таки просто, что называется one-liner:


Image(uiImage: qrCode)
.interpolation(.none)
.resizable()
.scaledToFit()
.frame(width: 200, height: 200)
.contextMenu {
ShareLink(item: Image(uiImage: qrCode), preview: SharePreview("My QR Code", image: Image(uiImage: qrCode)))
}


Но тут мы столкнулись с чем-то новым: изменение UI во время изменения UI❗️
qrCode переменная - это @State, и код ниже вызывается при отрисовки UI. Присвоение qrCode нового значения меняет состояние, тогда это событие должно порождать новую итерацию перерисовки.


if let outputImage = filter.outputImage {
if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
qrCode = UIImage(cgImage: cgImage)
return qrCode
}
}


➡️ Нотификации: проверка настроек нотификаций и добавление кнопки, чтобы мы получили нотификацию о конкретном человеке из нашего списка.

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Функционал кнопки “пошарить”
🔥3
Кнопка уведомления и как оно выглядит на экране блокировки
🔥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, и передачу сортировки туда как параметр


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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🆒2💯1
Проект 17 (день 86)

Новый проект - новые горизонты
86 день открывает тайны жестов (gestures), чуть больше чем обычные нажатия (taps).

▶️ Двойной тап, нажание (long press), минимальное время нажания, щипок (magnify gesture), поворот (rotate gesture). Не очень большой, но уже внушительный список разнообразных жестов. А так же различные настройки жестов 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 - текущая состояние приложения, доступно через @Environment(\.scenePhase) var scenePhase, и позволяет понять когда пользователь, к примеру, свернул наше приложение.

▶️ Accessibility настройки, такие как accessibilityDifferentiateWithoutColor, позволяют настроить View под определенные запросы пользователя. Это не правило, которому нужно 100% придерживаться, а скорее рекомендация.

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Media is too big
VIEW IN TELEGRAM
Проект 17 (день 88)

Приступили к реализации приложения. Используем полученные навыки, поэтому обойдёмся сегодня только видео 🎥

Наконец-то свои карточки делаем 😆

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Kotlin/Swift (iOS) Туда и Обратно
Проект 17 (день 88) Приступили к реализации приложения. Используем полученные навыки, поэтому обойдёмся сегодня только видео 🎥 Наконец-то свои карточки делаем 😆 #hackingwithswift
На видео заметны небольшие лаги. Сначала думал, что симулятор тормозит, но такое же поведение на реальном девайсе.
Что-то неправильно реализовано или это особенность SwiftUI DragGesture? 👀
Please open Telegram to view this post
VIEW IN TELEGRAM
Проект 17 (день 89)

Сегодня в программе (всё можно увидеть на видео):

🟢 Цветные карточки при свайпе. Влево - 🔴 вправо - 🟢
При включенной опции accessibilityDifferentiateWithoutColor мы не красим карточки, а показываем индикаторы на экране куда смахивать правильные и куда неправильные карточки.

🟢 Таймер на экране и состояние активности приложения (когда можно смахивать карточки). Также когда приложение сворачивается - таймер останавливается. Если ничего не предпринимать, то несколько секунд будет потеряно, поскольку iOS не сразу останавливает таймер.

🟢 Финальный аккорд - кнопка перезапуска, если карточек больше не осталось.

Согласитесь классный курс? 🤩

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2