Kotlin/Swift (iOS) Туда и Обратно
36 subscribers
127 photos
21 videos
9 files
84 links
Канал - журнал, рассказывающий об опыте изучения Swift & iOS backend-разработчиком на Java & Kotlin
Download Telegram
День 95 - Челенж

❗️ Предлагается создать приложения для броска кубика (1, 2 или 3).

Что ж, оказалось сделать это не просто 😰 И признаться я с этим не справился. Хотя потратил на это больше одного дня, с перерывами, но всё же.

Изначально я хотел сделать зацикленный прокручивающийся список. ScrollView для этого не подходит, да и в целом, у SwiftUI нет подходящей реализации, и нужно делать её самостоятельно.

Попытка сделать VStack со сдвигами элементов не увенчалась успехом и мне пришла идея сделать вращающиеся барабаны как в автоматах казино. Для этого я использовал уже знакомый rotation3DEffect.

Результат далёк от идеала, увидеть это можно на видео.

1️⃣ Полупрозрачность даёт не тот результат, который я ожидал. Особенно при анимировании, вращение прозрачных чисел выглядит как пробел в “барабане”

2️⃣ Для большого количества граней числа наезжают друг на друга. Как увеличить между ними размер я не придумал.

3️⃣ Добавление нового “кубика” может создать его в невалидном состоянии.

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👏1🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
Хочу поделиться одной своей идеей: поставить вертикальную перегородку в ZStack по z-индексу так, чтобы она проходила по центру “барабана” и перекрывала элементы, находящиеся позади.

Однако этот подход не сработал, потому что здесь всё устроено не так, как в 3D-графике, где у тебя есть “стена”, и объекты действительно прячутся за ней.
В SwiftUI rotation3DEffect не перемещает элементы в пространстве - он лишь меняет отображение уже отрисованного View. Вот где матрицы поворота, должно быть, используются!

По крайней мере, создаётся именно такое впечатление 😶🌫
🔥2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Хоть какой-то положительный прогресс 🥳

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

Я придумал как это можно обойти, даже с использованием “стены” (по факту не важно как затемнять, главное привязать это к количеству оборотов), нужно всего лишь:
⚡️ Воспользоваться таймером и делать изменения инкрементальными. Тогда в анимации будет отражено изменяющееся затемнение.

Тут сломались генераторы, возможно из-за работы одного и того же таймера, но чинить я это сегодня не буду 🙈
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Проект 19 (день 96). Подготовка к написанию приложения для поиска лыжных курортов.

🔴 NavigationSplitView - знакомимся с нюансами разработки под iPad, но очень поверхностно. Рассматривали как можно оптимальнее использовать большой экран. Единая кодовая база - 🔥

🔴 alert() & sheet() можно использовать с опциональными значениями.


Button(“Кликай”) {
selectedUser = User()
}
.sheet(item: $selectedUser) { user in
Text(user.id)
}


🔴 Group - view, как следует из названия, для группировки, без влияния на layout. Parent будет ответственным за отображение (вертикально, горизонтально, или по z оси). Можно задавать один стиль для набора вьюшек.

🔴 Поиск по вьюхе! Просто добавляем .searchable модификатор и появляется search bar


struct ContentView: View {
@State private var searchText = ""

var body: some View {
NavigationStack {
Text("Searching for \(searchText)")
.searchable(text: $searchText, prompt: “Найдём что-нибудь?”)
.navigationTitle("Searching")
}
}
}


🔴 @Observable как Environment элемент. Если не хочется передавать объект во вложенные вьюхи через конструктор (придется передать в каждую вью в иерархии), можно положить в .environment.
Выглядит как глобальные переменные, которые с пелёнок учат не использовать. На бэкэнде с этим хорошо справляется Dependency Injection.

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Paul Hudson так часто использует ее в примерах, что я не мог пройти мимо 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Проект 19 (день 97 и день 98)

Решил объединить оба дня в один пост, так как тут сильно нечего рассказывать. Мы сделали приложение, используя подходы из предыдущего урока. Впереди нас ждёт небольшой челленж.

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

#hackingwithswift
👍1
Проект 19 (день 99)

Челенж оказался не очень сложным:

🔴 Сортировка по id, имени и стране
🔴 Имя автора на фото
🔴 Сохранение и чтение используя UserDefaults

Самое интересное было в сортировке. Поскольку все поля (id, name, country) имеют одинаковый тип String, я подумал что было бы круто использовать KeyPath. Добавил его везде где нужно и прокинул в метод сортировки. Но разочарование не заставило себя долго ждать. Оказывается Picker не умеет работать с такими типами (или я 🤭). Пришлось добавить enum.

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
SnowSeeker-test.png
1 MB
10 из 12

Тестик для вас: https://www.hackingwithswift.com/review/ios-swiftui/snowseeker

Впереди большой тест на 100 вопросов и я его уже боюсь 🙀

Пожелайте мне удачи и поддержите большим пальчиком 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
95 из 100 верных ответов, я более чем удовлетворён таким результатом.
👍1🔥1
Мы сделали это 🥳
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31
Оставлю это тоже тут, для истории
👍1🔥1
Kotlin/Swift (iOS) Туда и Обратно
Начало положено! 🔥 Вчерашний день стал отличным стартом моего пути в изучении Swift 👉 Вместо заслуженного отдыха после напряжённой рабочей недели я решил посвятить вечер саморазвитию. Прошёл вводное видео и три урока: ➡️ Day 1: Variables, constants, strings…
Прошло ровно 3 месяца! Этот пост я сделал 22 января, а сегодня 22 апреля
Причем, это не специально, честно 😁

На самом деле я планировал пройти этот курс быстрее, но получилось как получилось. Учту при следующих планированиях 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1😁1
Хочу поблагодарить всех вас за вашу поддержку, комментарии, лайки, участие в опросах и просто за то, что вы следите за моими успехами 🥰
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥1🎉1
Всем привет! 👋

Думаю, настало время дать оценку 100-дневному курсу по SwiftUI от hackingwithswift.
https://www.hackingwithswift.com/100/swiftui

🔸 Общее впечатление: 5/5
Мне определенно заходит такой формат. Отличное сочетание теории, самостоятельной работы и тестов для самопроверки.

🔸 Понятность материала: 4/5
В целом почти все темы понятны, но после прохождения курса ощущается наличие некоторых пробелов.

🔸 Подача: 5/5
Формат видео удачно построен, живое общение Пола приятно смотреть. За дублирование темы в виде текста отдельный плюс.

🔸 Полезность: 5/5
Открыл для себя разработку UI приложений. Пришло понимание как это работает на самом базовом уровне.

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Старался аккуратно трекать время затраченное на курс, включая все задания и написание постов в канал. Кофе ☕️ не считал, но поверьте - много!

🔟🔟🔟 часов удовольствия 😍
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒2👏1
Как заметил Максим в комментариях, 30 часов это очень нереалистичное число для такого курса на 3 месяца.

Куда пропала остальная часть затреканного времени… я пока не понимаю.

Это число скорее нужно умножить на 5.
Я должен был потратить в среднем по 1-2 часа в день (в зависимости от урока). По итогу должно было быть около 150 часов.

Спасибо за внимательность 🤝
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤬1