Я хотел бы анимировать появление NSSplitViewItem с помощью .setPosition (), используя Swift, Cocoa и раскадровки. Мое приложение позволяет студенту вводить доказательство естественного вычета. Если это неверно, справа появляется «вид совета». Когда это правильно, это представление совета исчезнет.
Код, который я использую, приведен ниже, где первая функция заставляет появиться «совет», а вторая заставляет его исчезнуть:
func showAdviceView() {
// Our window
let windowSize = view.window?.frame.size.width
// A CGFloat proportion currently held as a constant
let adviceViewProportion = BKPrefConstants.adviceWindowSize
// Position is window size minus the proportion, since
// origin is top left
let newPosition = windowSize! - (windowSize! * adviceViewProportion)
NSAnimationContext.runAnimationGroup { context in
context.allowsImplicitAnimation = true
context.duration = 0.75
splitView.animator().setPosition(newPosition, ofDividerAt: 1)
}
}
func hideAdviceView() {
let windowSize = view.window?.frame.size.width
let newPosition = windowSize!
NSAnimationContext.runAnimationGroup{ context in
context.allowsImplicitAnimation = true
context.duration = 0.75
splitView.animator().setPosition(newPosition, ofDividerAt: 1)
}
}
Моя проблема в том, что действие анимации вызывает растяжение текста в представлениях, как вы можете видеть в этом примере: Текущее поведение
Я действительно хочу текст, чтобы сохранить все пропорции и плавно скользить так же, как мы видим, когда пользователь сам перемещает разделитель: Идеальное поведение (но должно быть достигнуто программно, а не вручную)
Пока что в процессе устранения неполадок я пытался оживить это вне NSAnimationContext; играл с одновременным рисованием и автоматическим изменением размеров подвидов в XCode; и в целом посмотрел на систему анимации Какао (хотя многое из того, что я читал, похоже, не имеет здесь прямого применения, но я вполне мог неправильно это понять). Я подозреваю, что происходит то, что прокси-объект .animator () допускает только альфа-изменения и растягивания - перерисовка, чтобы выравнивание текста соблюдалось во время анимации, может быть слишком нестандартным. Я чувствую, что мне нужно «обмануть» приложение, заставив его обрабатывать анимацию так, как будто она выполняется пользователем, но я не знаю, как go об этом.
Любые советы приветствуются. ..
Ура