Изменение размера анимации с помощью автоматического макета и «прыгающих» колец фокусировки - PullRequest
0 голосов
/ 28 мая 2018

Я работаю над приложением macOS, которое использует автоматическое расположение в иерархии представлений с представлениями на основе слоев.Приложение использует NSStackView с несколькими подпредставлениями, каждое из которых имеет кнопку свертывания / раскрытия, чтобы изменить размер соответствующего подпредставления.Изменение размера подпредставлений осуществляется путем добавления и удаления ограничений макета, а для анимации изменения размера используется контекст анимации.Я реализовал это, как показано на WWDC 2013, сессия 213, начиная примерно с минуты 29 :

@objc func disclosureToggeled(_ sender : Any) {
    if isCollapsed {
        self.addConstraint(collapseConstraint)
    }
    else {
        self.removeConstraint(collapseConstraint)
    }

    NSAnimationContext.runAnimationGroup({ context in
        context.allowsImplicitAnimation = true
        self.window?.layoutIfNeeded()
    })
}

Анимация изменения размера работает, как и ожидалось.

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

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 01 августа 2019

Я полагаю, что это связано с проблемой, которая обсуждается в том же видео (изменение размера окна).Решения, также обсуждаемые в видео, заключаются в том, чтобы либо

  1. Анимировать константу ограничения (а не добавлять / удалять ограничение) явно через метод доступа constraint.animator.constant или
  2. Отдельно анимировать сначала ограничениеречь идет о рамке окна, сохраняя приоритет ограничения ниже приоритета изменения размера окна, так что анимация ограничения не * изменяет размер окна .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...