Реализация размытия при многозадачности в SwiftUI
Улучшение конфиденциальности пользователей является важной частью разработки современных приложений. В этом руководстве рассказывается, как создать приложение SwiftUI, которое автоматически размывает экран при переходе в режим многозадачности или в фоновый режим, что является полезной функцией для защиты конфиденциальной информации.
Мы рассмотрим, как реализовать этот подход с использованием примера, в котором «секреты» разработчика размываются, когда приложение не активно. Следуя пошаговому руководству, вы научитесь применять эту технику конфиденциальности в своих приложениях SwiftUI.
Перед тем, как начать
Прежде чем начать, убедитесь, что у вас есть базовые знания Swift и SwiftUI, особенно в области управления сценами и фазами сцен. Если вы не знакомы с этими концепциями, рекомендуется ознакомиться с документацией Apple по SwiftUI.
Декларация групп пользовательских интерфейсов, составляющих части вашего приложения.
Настройка проекта
Для демонстрации размытия экрана мы используем простое приложение под названием My Secrets, которое скрывает конфиденциальную информацию, когда приложение переходит в фоновый режим.
В качестве отправной точки создайте список секретов, который будет храниться локально для отображения в нашем пользовательском интерфейсе.
class SecretsStore {
static var secrets: [String] = [
"Я все еще люблю **UIKit**.",
"Меню-гамбургеры меня коробят.",
"Я верю в **Human Interface Guidelines**.",
"Я тайно наслаждаюсь написанием документации.",
"Я считаю, что каждая ошибка — это просто недопонимание функции.",
"Я всегда ищу лучший способ сделать вещи.",
"У меня есть любимая тема в Xcode, и это не темная..."
]
}
Затем обновите ContentView, чтобы отображать простой стилизованный список элементов из массива секретов в SecretsStore.
struct ContentView: View {
var body: some View {
List(SecretsStore.secrets, id: \.self) { secret in
Text(.init(secret))
.listRowSeparator(.hidden)
.fontDesign(.monospaced)
}
.listStyle(.inset)
.navigationTitle("Мои секреты")
}
}
Цель приложения — автоматически размывать его содержимое при переходе в режим многозадачности или при его неактивности. Вот как мы можем реализовать эту функциональность.
Размытие представления
В файле ContentView.swift приложение будет отслеживать состояние сцены с использованием @Environment(\.scenePhase), чтобы обнаружить, когда оно становится неактивным или переходит в фоновый режим. В зависимости от текущего состояния сцены будет изменяться значение радиуса размытия, применяемого к содержимому представления.
Затем, с помощью модификатора blur(radius:opaque:), применяем эффект размытия к содержимому представления.
Когда пользователь переключается на другое приложение или возвращается на главный экран, конфиденциальное содержимое в вашем приложении становится размытым, скрывая его от посторонних глаз. Это гарантирует, что отображаемая информация останется защищенной, когда приложение не активно.
Когда пользователь возвращается в ваше приложение, эффект размытия плавно удаляется, и содержимое снова становится видимым без резких переходов.
Расширение функции
В то время как в предыдущем примере фокус был на одном представлении, вы можете расширить функциональность размытия на все приложение, интегрируя подобную логику в основной делегат сцены вашего приложения или выше в иерархии представлений. Это гарантирует, что все конфиденциальные данные будут защищены, когда приложение переходит между состояниями.
Создание контейнера
Другой подход — создать контейнер представления, который будет отслеживать текущее состояние приложения и применять эффект размытия к своему содержимому. Это может быть полезно, если вы хотите наложить изображение на контент, например, логотип вашего приложения, или если нужно размыть только определенные представления.
Та же логика может быть использована для создания кастомного модификатора.