От этого начинает уже иногда глаз дёргаться.
Проблема
Если у меня в определении sheet есть ошибка, то я вижу
Как решаю сейчас
В какой-то момент я понял, что с тулбаром всё в порядке. А как решение можно его закомментить и смотреть реальную ошибку.
Как это должно правильно решаться?
Подскажите кто знает, пожалуйста, я трачу реально много времени на это. Переместить тулбар вниз/наружу не получилось, т.к. он привязан к List, который находится внутри NavigationStack. Возможно стоит
Проблема
Если у меня в определении sheet есть ошибка, то я вижу
Ambiguous use of ‘toolbar(content:)’
Как решаю сейчас
В какой-то момент я понял, что с тулбаром всё в порядке. А как решение можно его закомментить и смотреть реальную ошибку.
Как это должно правильно решаться?
Подскажите кто знает, пожалуйста, я трачу реально много времени на это. Переместить тулбар вниз/наружу не получилось, т.к. он привязан к List, который находится внутри NavigationStack. Возможно стоит
sheet
на один уровень с toolbar
перенести?This media is not supported in your browser
VIEW IN TELEGRAM
Во время реализации столкнулся с таким странным поведением. Sheet не видел изменения в selectedImage, до тех пор пока не будет введен символ в TextField.
Пофиксил созданием отдельного View для добавления.
Пока ещё загадок для меня слишком много😱 Последовательно будем разбираться!
Пофиксил созданием отдельного View для добавления.
Пока ещё загадок для меня слишком много
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻1
Media is too big
VIEW IN TELEGRAM
По итогу получилось приложение в котором можно взять фото из галереи и добавить ему имя. Автоматически подтягивается последняя известная локация.
Второй день челенджа подразумевал добавление карты и отображение сохранённых записей на ней.
Тут я дополнительно посмотрел
- как делать фокус на конкретных полях (в данном случае имя записи получает фокус)
- TabView, чтобы переключаться между списком и картой
Второй день челенджа подразумевал добавление карты и отображение сохранённых записей на ней.
Тут я дополнительно посмотрел
- как делать фокус на конкретных полях (в данном случае имя записи получает фокус)
- TabView, чтобы переключаться между списком и картой
🔥1
Проект 16 (день 79)
После проекта, сделанного в рамках челенжа, мне не терпится поскорее пройти курс дальше! Небольшой, но, как всегда, полезный урок:
🟢 Выбор нескольких элементов в списке. Активируется либо горизонтальным свайпом 2-мя пальцами, либо добавлением кнопки
🟢 TabView - пришло его время, но я уже использовал его в челенже ✌️ Концепция вполне простая, но очень полезная. Вижу почти в каждом приложении.
#hackingwithswift
После проекта, сделанного в рамках челенжа, мне не терпится поскорее пройти курс дальше! Небольшой, но, как всегда, полезный урок:
EditButton
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Обратил внимание только сейчас.
Загруженное изображение как UIImage(systemName), а потом переданное в👶 Image становится пиксельным.
Если использовать Image(systemName), то получается векторное изображение, красивое при любом разрешении.
Загруженное изображение как UIImage(systemName), а потом переданное в
Если использовать Image(systemName), то получается векторное изображение, красивое при любом разрешении.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1🤔1
Проект 16 (день 80)
Сегодня тоже не много тем, точнее они не очень объемные, но они не становятся менее интересными:
🟢 Result - тип похожий на Either из функциональных языков. Может содержать в себе либо success, либо failure. В Kotlin такой тоже есть.
🟢 Интерполяция изображений - у Image есть
🟢 Контекстные меню - при нажатии на элемент (удерживая палец) можно вызвать меню. Автор рекомендует им не увлекаться, т.к. такой функционал не очень очевиден пользователям.
Кстати, на маке в Swift Playground это не работает, видимо только для тачскринов.
#hackingwithswift
Сегодня тоже не много тем, точнее они не очень объемные, но они не становятся менее интересными:
interpolation
расширение, можно настроить степень интерполяции. Если простыми словами, это дорисовать новые пиксели на основе существующих при увеличении изображения.Кстати, на маке в Swift Playground это не работает, видимо только для тачскринов.
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Решил посмотреть на приложение, что получилось с ChatGPT в паре написать - я плачу 😆
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1😁1
Проект 16 (день 81)
Поскольку уроки небольшие, прохожу несколько за раз.
День 81 предлагает следующие темы:
🟢 Можно добавить кастомные свайп-кнопки на элементы списка
🟢 Нотификации. Фреймворк, насколько я понял, используется, скажем, не новый 😆
Запрашиваем права
Делаем отправку
🟢 Подключение проектов как зависимости. Выглядит, на самом деле, как
#hackingwithswift
Поскольку уроки небольшие, прохожу несколько за раз.
День 81 предлагает следующие темы:
List {
Text("Taylor Swift")
.swipeActions {
Button("Delete", systemImage: "minus.circle", role: .destructive) {
print("Deleting")
}
}
.swipeActions(edge: .leading) {
Button("Pin", systemImage: "pin") {
print("Pinning")
}
.tint(.orange)
}
}
Запрашиваем права
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { success, error in
if success {
print(“Всё ок!”)
} else if let error {
print(error.localizedDescription)
}
}
Делаем отправку
let content = UNMutableNotificationContent()
content.title = “Накорми кота”
content.subtitle = “Он “голодный
content.sound = UNNotificationSound.default
// показать нотификацию через 5 секунд
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
// выбираем рандомный ид
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request)
git submodule
. Что тут ещё написать…?#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1😁1
Пример git submodule: https://github.com/robocorp/example-use-git-submodule-for-shared-code
Выглядит это как отдельная папка с указанием хэша коммита👩💻
Выглядит это как отдельная папка с указанием хэша коммита
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Проект 16 (день 82)
И вновь день с небольшим количеством материала. Мы начали объединять пройденные ранее уроки в приложение для отслеживания людей, которых мы встретили на конференции:
🟢 Создали 4 основных таба, отражающих списки людей: все, с кем познакомились, с кем предстоит встретиться и информация о себе.
Для первых 3 табов используем одну и ту же View. Определяем тип с помощью перечисления:
🟢 Добавили SwiftData, для этого подготовили такую модель
🟢 Добавили динамическую фильтрацию в зависимости от FilterType при инициализации View:
#hackingwithswift
И вновь день с небольшим количеством материала. Мы начали объединять пройденные ранее уроки в приложение для отслеживания людей, которых мы встретили на конференции:
Для первых 3 табов используем одну и ту же View. Определяем тип с помощью перечисления:
enum FilterType {
case none, contacted, uncontacted
}
@Model
class Prospect {
var name: String
var emailAddress: String
var isContacted: Bool
init(name: String, emailAddress: String, isContacted: Bool) {
self.name = name
self.emailAddress = emailAddress
self.isContacted = isContacted
}
}
init(filter: FilterType) {
self.filter = filter
if filter != .none {
let showContactedOnly = filter == .contacted
_prospects = Query(filter: #Predicate {
$0.isContacted == showContactedOnly
}, sort: [SortDescriptor(\Prospect.name)])
}
}
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Применяю полученные навыки для самообучения!
Не todo-list же делать😀
Не todo-list же делать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2 1
Проект 16 (день 83)
Сегодня мы разбирались:
🟢 Как генерировать QR код
Для генерации использовали
Тут пригодилась интерполяция, т.к. она включена по-умолчанию и изображение при масштабировании становится “мыльным”. Скину скрины для сравнения.
🟢 Как сканировать QR код
Для чтения использовали код автора (думаю, что это как раз тот код, упоминаемый тут https://t.me/kotlin2swift/86, по крайней мере называется он именно так).
🟢 Добавили возможность удаления записей с помощью свайпа.
Ниже приложу скриншоты📸
#hackingwithswift
Сегодня мы разбирались:
Для генерации использовали
CIFilter.qrCodeGenerator()
. Даже не подозревал, что настолько просто это можно сделать.Тут пригодилась интерполяция, т.к. она включена по-умолчанию и изображение при масштабировании становится “мыльным”. Скину скрины для сравнения.
Для чтения использовали код автора (думаю, что это как раз тот код, упоминаемый тут https://t.me/kotlin2swift/86, по крайней мере называется он именно так).
Ниже приложу скриншоты
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
1 - интерполяция
2, 3 - кнопки для разного типа записей
4 - множественное редактирование
2, 3 - кнопки для разного типа записей
4 - множественное редактирование
👍2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Небольшой прогресс с приложением DerDieDas
Добавил сюда отображение правильного артикля.
Правда у меня есть ощущение, что анимация отрабатывает не одинаково для обоих слов🤔
Чтобы подебажить это, я увеличил duration анимации, но в замедленном варианте это ощущение пропадает.
Это обман зрения? И если да, то как его исправить, помимо отключения анимации 🤣
Добавил сюда отображение правильного артикля.
Правда у меня есть ощущение, что анимация отрабатывает не одинаково для обоих слов
Чтобы подебажить это, я увеличил duration анимации, но в замедленном варианте это ощущение пропадает.
Это обман зрения? И если да, то как его исправить, помимо отключения анимации 🤣
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Проект 16 (день 84)
Две темы сегодня:
➡️ Контекстное меню на изображении - добавили кнопку “пошарить” QR код. Делается это довольно таки просто, что называется one-liner:
Но тут мы столкнулись с чем-то новым: изменение UI во время изменения UI❗️
➡️ Нотификации: проверка настроек нотификаций и добавление кнопки, чтобы мы получили нотификацию о конкретном человеке из нашего списка.
#hackingwithswift
Две темы сегодня:
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