Добро пожаловать в разбор кейсов, как Apple использует элементы UIKit
в своих приложениях. Сегодня разберу Калькулятор. До этого уже разобрал Календарь. Я - Иван Воробей, веду телеграмм канал для iOS Разработчиков «Код Воробья».
Приложение маленькое, но сделано на сценах. Сцена одна, класс окна назвали CalculatorWindow
.
Контроллер
Root-контроллер назвали CalculatorController
. Все элементы вписываются в SafeAreaLayoutGuide.
На весь экран добавлен жест _UISystemGestureGateGestureRecognizer
, что делает - непонятно. Возможно, управляет ховер-анимацией если водить пальцем не отрывая от экрана по кнопкам.
Клавиатура
Кнопки находятся в контейнере CalculatorKeypadView
. Сетку кнопок расставили фреймами, а сам контейнер лейаутится с помощью констрейнтов.

Все кнопки это объекты класса CalculatorKeypadButton
, он наследуется от UIButton
. Внутри кнопок находится системный UILabel
, даже кнопка C
- Clear сделана текстом.

Для клавиатуры в звонилке Apple все буквы переводила в картинки.
Окно ввода
Окно с введёнными цифрами назвали DisplayView
. Ширину лейбла внутри контейнера пересчитывают при каждом вводе новой цифры или операции. На вью добавили 3 жеста - свайп, лонг-пресс и тап.

Высотой лейбла с результатом управляют констрейнтами. Для альбомной ориентации получается странное значение 71.5.
Альбомная ориентация
В портретном режиме скрытых UIView
нет. Значит, при повороте устройства, новые кнопки добавляются и расставляются на лету. Кнопки из портретного режима сохраняются между поворотами.

Accessibility
Приложение поддерживает Voice Over
и Voice Control
для всех интерактивных элементов.

Окно с результатом диктуется как «Result, 89, Summary Element».