Создайте приложение для Apple Watch
В этом уроке мы будем разрабатывать приложение Omnitrix для Apple Watch. И да, вы правильно угадали. Это приложение вдохновлено мультсериалом Ben 10
!!
Состав
Это серия из 2-х частей. Первый охватывает базовую настройку, которую сравнительно легко разработать. И предоставит один с минимальной реализацией приложения. В то время как последняя часть предоставляет дополнительные реализации, которые делают приложение более точным, как в сериале.
Все активы, необходимые для проекта, представлены в ссылке.
Настройка проекта
Запустите Xcode, выберите Создать новый проект Xcode и выберите Watch App в watchOS, чтобы создать проект. Мы пропустим другой вариант, так как нам нужно создать отдельное приложение для часов для этого проекта.
В следующем запросе назовите свой проект и убедитесь, что интерфейс установлен на SwiftUI. Вы также можете снять галочку с двух последних опций, так как они не понадобятся во время разработки.
И вуаля!! Вы только что создали свой проект SwiftUI. Чтобы просмотреть его, нажмите на опцию «Возобновить», которую можно найти в правом разделенном редакторе. Если вы его не видите, обязательно включите параметр «Холст» в настройках редактора настроек. После успешной сборки вы увидите предварительный просмотр часов с сообщением Hello World.
Создание циферблата
С точки зрения пользовательского интерфейса эта часть состоит из двух слоев. Нижний — это циферблат, который будет вращаться в зависимости от сигналов цифровой заводной головки. А верхний — это вид изображения для размещения изображения инопланетянина. Итак, начнем сначала с нижнего.
Импортируйте набор изображений в файл Assets проекта.
Вернемся к файлу ContentView
, чтобы реализовать слой циферблата. В файле удалите элемент Text
и добавьте Image
с модификаторами resizable
и aspect ratio
.
Image("Watchface") .resizable() .aspectRatio(contentMode: .fit)
Добавление анимации вращения на циферблат
Мы хотим, чтобы циферблат вращался в соответствии с вводом цифровой короны. Показания оттуда будут храниться в переменной scrollOffset
.
@State var scrollAmount = 0.0
Далее мы добавим модификатор digitalCrownRotation
для регистрации и обновления переменной.
Кроме того, Image
должен быть помещен в ZStack
, так как мы хотим реализовать несколько слоев друг над другом. А затем добавьте модификатор digitalCrownRotation к файлу ZStack
.
Так как мы хотели добавить 10 инопланетян, мы установим диапазон от 0 до 9 со значением шага 1.
После этого мы также добавим модификатор focusable
. Это установит фокус на циферблате и будет реагировать на ввод цифровой заводной головки, не выбирая ее. Добавьте смещение к модификаторам ZStack
, чтобы перевести элемент немного ниже, чтобы использовать пустое пространство экрана.
.offset(y: 15) .focusable(true)
Слушатель настроен, и на сам циферблат можно добавить анимацию. Для этого добавьте к изображению модификатор rotationEffect
.
.rotationEffect(.degrees(scrollAmount*90))
При этом изображение будет поворачиваться на 90 градусов за одно движение цифровой короны. Полный код должен выглядеть так:
Запустите приложение на симуляторе или на самом устройстве. При вращении цифровой заводной головки циферблат часов будет анимироваться, создавая эффект смены циферблата.
На симуляторе наведите курсор на коронку диталя и прокрутите вверх или вниз, чтобы повернуть ее.
Примечание. Во время разработки потеря соединения между iPhone и Apple Watch довольно распространена. Вы можете принудительно запустить процесс синхронизации, открыв приложение «Камера» на Apple Watch.
Инопланетяне!
На последнем этапе мы добавим в проект изображения пришельцев. Для этого создайте enum
для размещения данных с целым числом в качестве необработанного значения.
После этого добавьте еще один Image
под циферблатом. Для имени изображения мы добавим следующую логику.
Image("\(Aliens(rawValue: Int(scrollAmount))!)")
Здесь переменная scrollOffset
используется для сопоставления с соответствующим пришельцем из перечисления с использованием необработанного значения. А поскольку смещение имеет тип double, нам нужно typecast
преобразовать его в целое число.
После этого добавьте следующий модификатор, чтобы изменить размер и сохранить изображение в пределах рамки циферблата.
.resizable() .padding(.all, 45) .aspectRatio(contentMode: .fit)
К настоящему времени код вашего проекта должен выглядеть так:
Вот и все, вы завершили первый раздел этого приложения. Вы можете запустить его на физических Apple Watch и испытать версию Omnitrix на своем запястье!
Код проекта доступен на GitHub.
Что дальше
Вы можете следовать второй части этого руководства, чтобы создать более мультяшную версию этого приложения. Что включает в себя добавление дополнительных слоев с анимацией открытия и закрытия.