На WWDC 20 Apple анонсировала несколько новых интересных API для старого и скучного UIPageControl.
В этой статье мы обсудим следующие новые изменения в UIPageControl
в iOS 14:
- Стиль фона
- Изображение пользовательского индикатора
- Изображение пользовательского индикатора по определенному индексу
- Бесконечные страницы (новое поведение очистки)
Стиль фона
У нас есть новый вариант стиля для нашего UIPageControl
под названием BackgroundStyle
. Это перечисление с тремя значениями:
Использование довольно простое. По умолчанию это minimal
:
pageControl.backgroundStyle = .prominent
Примечание. Когда состояние взаимодействия continuous
, стиль фона изменяется автоматически, если для backgroundStyle
установлено значение automatic
. Я расскажу об API взаимодействия позже в этой статье.
Изображение пользовательского индикатора
Apple представила новый API для установки пользовательского значка или изображения для нашего UIPageControl
по сравнению со старым круглым значком.
Я помню, что для достижения этой цели было приложено много усилий, написав собственный класс UIPageControl
. Название свойства ниже:
/// The preferred image for indicators. Symbol images are recommended. Default is nil. @available(iOS 14.0, *) open var preferredIndicatorImage: UIImage?
Использование довольно простое. Я использовал SF Symbol для этой демонстрации:
pageControl.preferredIndicatorImage = UIImage.init(systemName: “heart.fill”)
Изображение настраиваемого индикатора по определенному индексу
/** * @abstract Returns the override indicator image for the specific page, nil if no override image was set. * @param page Must be in the range of 0..numberOfPages */ @available(iOS 14.0, *) open func indicatorImage(forPage page: Int) -> UIImage?
Вы помните приложение Yahoo Weather , которое было предустановлено на вашем iPhone? Он имеет UIPageControl
внизу, где первый значок - это значок местоположения, обозначающий текущее местоположение. Интересно то, что у них был этот контроль с самого начала. Я всегда думал о реализации и усилиях, необходимых только для этого.
Теперь это проще простого, потому что iOS 14 предоставила нам новый API, с помощью которого вы можете установить собственный значок для каждого индекса вашего UIPageControl
.
Я использовал SF Symbol для этой демонстрации:
pageControl.setIndicatorImage(UIImage.init(systemName: “location.fill”), forPage: 0)
Только представьте, какую настройку вы можете сделать с помощью возможности установить каждый значок и пользовательский опыт, который вы можете предоставить нашему пользователю.
Ниже приведен пример, в котором настраиваемый значок настроен для управления страницей в зависимости от различных дождливых погодных условий.
Бесконечные страницы (новое поведение при очистке)
С новым UIPageControl
вы можете установить бесконечное количество страниц. Ну, не творите бесконечно ... но как это круто?
Использование довольно простое. Я установил здесь 400
для этой демонстрации:
pageControl.numberOfPages = 400
До iOS 14 мы могли устанавливать любое количество страниц. Так что же Apple сделала в этом году для улучшения подобных сценариев?
Что ж, он представил новый API и совершенно новый UX для решения этой самой проблемы.
Apple предоставила пользовательское взаимодействие для нашего нового UIPageControl
в iOS14 под названием InteractionState
. Это перечисление с двумя типами взаимодействия:
- Дискретный
- Непрерывный
В iOS 14 значение по умолчанию для взаимодействия UIPageControl
- continuous
:
Вы можете изменить состояние взаимодействия на discrete
, установив для свойства ниже false
:
/// Returns YES if the continuous interaction is enabled, NO otherwise. Default is YES. @available(iOS 14.0, *) open var allowsContinuousInteraction: Bool
Вы также можете добавить наблюдателя, чтобы изменить значение свойства interactionState
и проверить текущее состояние взаимодействия с помощью свойства ниже:
/// The current interaction state for when the current page changes. Default is UIPageControlInteractionStateNone @available(iOS 14.0, *) open var interactionState: UIPageControl.InteractionState { get }
Ниже я поделился гифками с этими двумя типами взаимодействий. Вы можете видеть, что непрерывное взаимодействие помогает нам достичь любого индекса нашего UIPageControl
с помощью поведения перетаскивания. Для дискретного взаимодействия мы нажимаем на него и переходим к следующему индексу один за другим.
Заключение
Спасибо за чтение. Я надеюсь, что эта статья поможет вам настроить UIPageControl
в вашем приложении и оживить ваш старый контроль.