Проект 18 (день 93)
Продолжаем знакомиться с layout системой📕
🔴
К слову,
Тут есть и обратная сторона, элемент с таким frame будет позиционирован не по центру, а в левом верхнем углу. Фиксится это так:
Выглядит как костылище! Нет, это он и есть… Сначала говорим картинке, что у неё ширина 80%, а потом говорим, что оно должно отображаться на всей доступной области.
🔴 У
Область применения мне пока не понятна, но безусловно хорошо, что такое есть.
🔴 В
Классный эффект с вращающимся текстом при скроллинге😺
Текущий этап изучения: ох уж этот SwiftUI👶
Мне определенно нужно будет пройти этот проект ещё раз. Но я надеюсь, что я не столкнусь с проблемами связанными с layout😆
#hackingwithswift
Продолжаем знакомиться с layout системой
GeometryReader
- предоставляет информацию о размере и положении вью внутри доступного пространства. С его помощью можно центрировать элемент вручную, иметь адаптивный размер вью, создавать кастомный layout.
GeometryReader { proxy in
Image(.example)
.resizable()
.scaledToFit()
.frame(width: proxy.size.width * 0.8, height: 300)
}
К слову,
containerRelativeFrame
работает не так, при использовании его внутри HStack, VStack. GeometryReader в этом случае справляется “лучше”.Тут есть и обратная сторона, элемент с таким frame будет позиционирован не по центру, а в левом верхнем углу. Фиксится это так:
GeometryReader { proxy in
Image(.example)
.resizable()
.scaledToFit()
.frame(width: proxy.size.width * 0.8)
.frame(width: proxy.size.width, height: proxy.size.height)
}
Выглядит как костылище! Нет, это он и есть… Сначала говорим картинке, что у неё ширина 80%, а потом говорим, что оно должно отображаться на всей доступной области.
GeometryReader
есть возможность получить координаты относительно CoordinateSpace: глобальный, локальный, кастомный. Например, proxy.frame(in: .global).midX
.Область применения мне пока не понятна, но безусловно хорошо, что такое есть.
ScrollView
есть возможность получить доступ к неявному GeometryReader через visualEffect
.
Text("Number \(num)")
.font(.largeTitle)
.padding()
.background(.red)
.frame(width: 200, height: 200)
.visualEffect { content, proxy in
content
.rotation3DEffect(.degrees(-proxy.frame(in: .global).minX) / 8, axis: (x: 0, y: 1, z: 0))
}
Классный эффект с вращающимся текстом при скроллинге
Текущий этап изучения: ох уж этот SwiftUI
Мне определенно нужно будет пройти этот проект ещё раз. Но я надеюсь, что я не столкнусь с проблемами связанными с layout
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2 1
Всем привет и извиняюсь за недельное отсутствие ⏳
После небольшого перерыва я снова в строю и продолжаю путь за знаниями. Честно говоря, я не сидел сложа руки - каждый день смотрел видео по разработке на Swift и SwiftUI
Позже поделюсь списком ресурсов, к которым время от времени обращаюсь.
А пока хочу порекомендовать вот этот канал: https://www.youtube.com/@Kavsoft
Очень интересно наблюдать, как там создают красивые эффекты и функциональные View. Ставь🔥 если тоже подписан(а)
После небольшого перерыва я снова в строю и продолжаю путь за знаниями. Честно говоря, я не сидел сложа руки - каждый день смотрел видео по разработке на Swift и SwiftUI
Позже поделюсь списком ресурсов, к которым время от времени обращаюсь.
А пока хочу порекомендовать вот этот канал: https://www.youtube.com/@Kavsoft
Очень интересно наблюдать, как там создают красивые эффекты и функциональные View. Ставь
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Kavsoft
Learn - Develop - Deploy
Hey Everyone!
Kavsoft is a channel where I focus on making tutorials on Swift and SwiftUI that makes working with it fun, simple and easy.
Here I try making concepts more understandable.
My goal is to make complex codes simple and…
Hey Everyone!
Kavsoft is a channel where I focus on making tutorials on Swift and SwiftUI that makes working with it fun, simple and easy.
Here I try making concepts more understandable.
My goal is to make complex codes simple and…
👍2
Media is too big
VIEW IN TELEGRAM
Предлагаю полюбоваться на этот прекрасный и очень простой в реализации эффект, который был в уроке
https://www.hackingwithswift.com/books/ios-swiftui/scrollview-effects-using-geometryreader
#hackingwithswift
https://www.hackingwithswift.com/books/ios-swiftui/scrollview-effects-using-geometryreader
#hackingwithswift
🔥2
LayoutAndGeometry-test.png
1016.4 KB
Тем временем тест выполнен, несмотря на то, что ответил на все вопросы правильно, хорошим пониманием этой темы похвастаться не могу.
Попробовать можно тут: https://www.hackingwithswift.com/review/ios-swiftui/layout-and-geometry
Попробовать можно тут: https://www.hackingwithswift.com/review/ios-swiftui/layout-and-geometry
🔥1
Замечу, что пошла последняя неделя 100 дневного курса
Как-то даже грустно😢
Но впереди реализация моего приложения! И я с нетерпением жду этого⏳
Как-то даже грустно
Но впереди реализация моего приложения! И я с нетерпением жду этого
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Проект 18 (день 94)
Заключительная часть Проекта 18 включает:
🔴 Тест - результаты которого можно найти в предыдущем посте https://t.me/c/2294310025/234
🔴 Челленж - видео будет в следующем посте. В основу взят список с различными (фиксированными цветами).
Челенж небольшой, всего 3 задания:
🟢 эффект прозрачности для элементов сверху списка
🟢 масштабирование - сверху элементы меньше размером, внизу больше
🟢 менять цвета в зависимости от положения на экране, но я также добавил изменение цвета ещё и в зависимости от индекса
#hackingwithswift
Заключительная часть Проекта 18 включает:
Челенж небольшой, всего 3 задания:
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Media is too big
VIEW IN TELEGRAM
Зачесались руки поэкспериментировать с шейдерами ✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
День 95 - Челенж
❗️ Предлагается создать приложения для броска кубика (1, 2 или 3).
Что ж, оказалось сделать это не просто😰 И признаться я с этим не справился. Хотя потратил на это больше одного дня, с перерывами, но всё же.
Изначально я хотел сделать зацикленный прокручивающийся список. ScrollView для этого не подходит, да и в целом, у SwiftUI нет подходящей реализации, и нужно делать её самостоятельно.
Попытка сделать VStack со сдвигами элементов не увенчалась успехом и мне пришла идея сделать вращающиеся барабаны как в автоматах казино. Для этого я использовал уже знакомый
Результат далёк от идеала, увидеть это можно на видео.
1️⃣ Полупрозрачность даёт не тот результат, который я ожидал. Особенно при анимировании, вращение прозрачных чисел выглядит как пробел в “барабане”
2️⃣ Для большого количества граней числа наезжают друг на друга. Как увеличить между ними размер я не придумал.
3️⃣ Добавление нового “кубика” может создать его в невалидном состоянии.
#hackingwithswift
Что ж, оказалось сделать это не просто
Изначально я хотел сделать зацикленный прокручивающийся список. ScrollView для этого не подходит, да и в целом, у SwiftUI нет подходящей реализации, и нужно делать её самостоятельно.
Попытка сделать VStack со сдвигами элементов не увенчалась успехом и мне пришла идея сделать вращающиеся барабаны как в автоматах казино. Для этого я использовал уже знакомый
rotation3DEffect
.Результат далёк от идеала, увидеть это можно на видео.
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👏1🤔1
Код закинул сюда: https://gist.github.com/codivio/b23e16a816ad11d8fb23cf26631cbbd7
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Хочу поделиться одной своей идеей: поставить вертикальную перегородку в
Однако этот подход не сработал, потому что здесь всё устроено не так, как в 3D-графике, где у тебя есть “стена”, и объекты действительно прячутся за ней.
В SwiftUI
По крайней мере, создаётся именно такое впечатление 😶🌫
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). Подготовка к написанию приложения для поиска лыжных курортов.
🔴 🔥
🔴
🔴
🔴 Поиск по вьюхе! Просто добавляем
🔴
Выглядит как глобальные переменные, которые с пелёнок учат не использовать. На бэкэнде с этим хорошо справляется Dependency Injection.
#hackingwithswift
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
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
Решил объединить оба дня в один пост, так как тут сильно нечего рассказывать. Мы сделали приложение, используя подходы из предыдущего урока. Впереди нас ждёт небольшой челленж.
Это было последнее приложение, и, к сожалению, мы не применили большинство изученных инструментов.
#hackingwithswift
👍1
Проект 19 (день 99)
Челенж оказался не очень сложным:
🔴 Сортировка по id, имени и стране
🔴 Имя автора на фото
🔴 Сохранение и чтение используя UserDefaults
Самое интересное было в сортировке. Поскольку все поля (id, name, country) имеют одинаковый тип String, я подумал что было бы круто использовать
#hackingwithswift
Челенж оказался не очень сложным:
Самое интересное было в сортировке. Поскольку все поля (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 вопросов и я его уже боюсь🙀
Пожелайте мне удачи и поддержите большим пальчиком👍
Тестик для вас: https://www.hackingwithswift.com/review/ios-swiftui/snowseeker
Впереди большой тест на 100 вопросов и я его уже боюсь
Пожелайте мне удачи и поддержите большим пальчиком
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3