Connect with us

TechHype

Советы по реализации темного режима в iOS

В этой статье автор, столкнувшись с некоторыми проблемами, погружается в возможности UIKit, которые могут быть полезны при реализации темной темы.

Опубликовано

/

     
     

Уже прошло достаточно времени с момента появления темного режима в iOS 13, и много было написано о динамических цветах, наборах цветов, динамических изображениях/материалах и других инструментах для поддержки этой новой функции. В этой статье автор, столкнувшись с некоторыми проблемами, погружается в возможности UIKit, которые могут быть полезны при реализации темной темы.

Платформа: iOS
Medium: 👏 325

Машинный перевод статьи

Основы: настраиваемый динамический цвет

Как вы, возможно, уже знаете, динамические цвета доступны тремя различными способами: с использованием определенных системой семантических цветов (например, systemBackground, label, systemRed и т. Д.), Путем определения пользовательских наборов UIColor в Assets.xcassets или путем кодирования ваших динамических цветов. любить:

Уровень и особенности пользовательского интерфейса

Подумайте о приложениях Apple, таких как Сообщения, в темном режиме: тот же backgroundColor выглядит черным на главном экране, но темно-серым на контроллере, представленном в новом модальном стиле .automatic. Это небольшая деталь, которая придает пользователям (в сочетании с анимацией) ощущение модальности. Определив в коде свои пользовательские динамические цвета, вы сможете достичь того же результата, просто используйте свойство userInterfaceLevel вместе с уже известным userInterfaceStyle из UITraitCollection:

case .dark: return traits.userInterfaceLevel == .elevated ? elevatedDark : dark

Эти виды настроек доступны не только для цветов, но и для других элементов пользовательского интерфейса, например изображений, которые вы, возможно, захотите адаптировать к разным стилям.

В общем, стиль и уровень пользовательского интерфейса — это лишь самые распространенные черты, которые вы можете использовать для адаптации своего пользовательского интерфейса к темному режиму, но UITraitCollection предлагает полный набор инструментов для тонкой настройки нашего пользовательского интерфейса на основе множества различных условий окружающей среды. : вы можете найти больше об этом в официальной документации.

Разрешение динамического цвета/изображения

В некоторых случаях вам может потребоваться знать текущее значение RGB динамического цвета для определенных нужд; в некоторых других случаях использования, например, при работе с CALayer, вам необходимо знать текущее значение динамического цвета. В этих ситуациях мы можем разрешить динамические цвета (а также изображения) с помощью определенного системой API:

Позвольте пользователю выбрать (переопределение)

Следование стилю, определенному системой, — это основной (и всегда хороший) способ адаптировать стиль нашего приложения; но допустим, мы хотим предоставить нашим пользователям свободу выбора стиля, который должно использовать приложение: светлый, темный или системный, в зависимости от конкретного типа приложения или просто в качестве варианта настройки. Ключ UIUserInterfaceStyle в Info.plist нам не помогает, потому что он привязывает пользовательский интерфейс к одному стилю. Метод overrideUserInterfaceStyle переопределяет стиль на экране, окнах, представлениях и контроллерах (и их потомках), но как мы можем использовать его эффективно? Давайте посмотрим на эту действительно простую реализацию:

  • пользователь может выбирать между светлым, темным и системным стилями: последний относится к userInterfaceStyle UIScreen, который всегда является стилем системного уровня;
  • когда пользователь переключает стиль, мы переопределяем стиль keyWindow, вызывая функцию updateTheme, поэтому изменение автоматически распространяется по приложению, и мы сохраняем предпочтения пользователя;
  • последнее, но не менее важное: при запуске приложения (в didFinishLaunchingWithOptions), инициализируя наш объект Theme, мы переопределяем стиль keyWindow только в том случае, если пользователь выбрал принудительное изменение стиля на светлый / темный;
  • NB: если вы используете новый UISceneDelegate для управления несколькими окнами, вам следует полагаться на этот API вместо keyWindow. Кроме того, переопределив стиль и затем вернувшись к выбору системы, ваше приложение не будет автоматически обновляться во время текущего сеанса, если стиль будет изменен позже на системном уровне (например, через Центр управления).
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement

Популярное

Спасибо!

Теперь редакторы в курсе.