Как убрать WKInterfaceController с другого контроллера? - PullRequest
0 голосов
/ 18 марта 2019

Я создаю свое первое приложение WatchOS в качестве дополнения к приложению iOS.

Приложение Watch должно иметь возможность отображать мяч для бинго, номер которого отправляется с телефона. Поскольку я не могу накладывать изображения на WatchOS, я создал 6 WKInterfaceControllers. Один из них является «основным» контроллером, а остальные 5 имеют уникальное фоновое изображение, представляющее собой шар для бинго правильного цвета (синий, красный, серый, зеленый и желтый), а затем я накладываю метку с буквой и номером шара. (т. е. B14). Я не мог найти способ динамического управления фоновым изображением одного WKInterfaceController - но если бы был способ сделать это - я был бы очень признателен за совет, как это сделать, и моя другая проблема не существовала бы.

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

let nextName = "\(ballColor)Controller"
DispatchQueue.main.async {
    self.presentController(withName: nextName, context: message)
    WKInterfaceDevice().play(.click)
}

Проблема, с которой я столкнулся, заключается в том, что, как только я активирую первый контроллер цвета, я не могу активировать другой контроллер цвета, не отключив текущий активный.

Итак - как я могу это сделать? Я думаю, что мне просто нужен способ сохранить ссылку на активный контроллер, чтобы я мог отклонить его, прежде чем активировать для следующего шара, - но я не могу понять, как это сделать.

Я был бы признателен, если бы кто-то мог помочь мне указать правильное направление здесь ...

Заранее спасибо

1 Ответ

0 голосов
/ 20 марта 2019

Я не знаю, есть ли ответ на мой оригинальный вопрос. Из того, что я вижу, кажется невозможным сохранить ссылку на активный WKInterfaceController и взаимодействовать с ним с другого контроллера - но я нашел способ решения своей основной проблемы. Я публикую свои выводы на случай, если другие застрянут так же, как и я.

У меня сложилось ошибочное впечатление, что единственный способ наложить текст на графику в WatchKit - установить фон WKInterfaceController на изображение, а затем поместить поверх него метку, но свойство фонового изображения контроллера WKInterface недоступно для программной настройки, поэтому я создал отдельный экземпляр WKInterfaceController для каждого отдельного фонового изображения, которое я хотел использовать. Но, как я и ожидал, был другой, лучший способ.

Объект "group" также имеет свойство фонового изображения, и IS позволяет установить это программно.

Я удалил свои 5 отдельных интерфейсных контроллеров и заменил их на 1 интерфейсный контроллер, содержащий группу, а затем программно установил фоновое изображение группы из сеанса: didReceiveMessage, чтобы он был подходящим изображением для последних данных, полученных с телефона.

Единственная оставшаяся сложность заключалась в том, что я все еще не мог манипулировать чем-либо на этом WKInterfaceController из моего основного WKInterfaceController, который также служил моим WCSessionDelegate. Единственный способ справиться с этим - деактивировать WCsession, установив WCSession.default.delegate в ноль из сеанса: функцию didReceiveMessage непосредственно перед представлением второго контроллера, а затем снова активировать его в активном состоянии: withContext во втором контроллере, который также требуется, чтобы я импортировал WatchConnectivity и соответствовал WCSessionDelegate.

...