Как с помощью Swift анимировать метод .setPosition () объекта NSSplitView без визуального растягивания его содержимого? - PullRequest
0 голосов
/ 05 августа 2020

Я хотел бы анимировать появление 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 об этом.

Любые советы приветствуются. ..

Ура

...