Каков наилучший подход к анимации кадров в NSView?

В идеале мне нужно что-то вроде UIView.animateWithDurationОднако я знаю, что это не API, который доступен в MacOS. Каков наилучший способ манипулировать фактическим кадром NSView и анимировать изменения?

Я пытался пойти на CABasicAnimationОднако это выполняется на CALayer, а не на само представление.

Что мне нужно, так это оживить реальный видовой кадр... (или, может быть, это плохая практика, и есть альтернатива?)

По этой причине после небольшого копания я нашел NSAnimationContext, Это, однако, кажется просто интерполировать / исчезать между двумя состояниями, что не то чувство, к которому я стремлюсь.

Вот небольшой пример кода, который у меня есть:

override func mouseDown(with event: NSEvent) {

    let newSize = NSMakeRect(self.frame.origin.x,
                             self.frame.origin.y - 100,
                             self.frame.width, self.frame.height + 100)

    NSAnimationContext.runAnimationGroup({ (context) -> Void in
        context.duration = 0.5
        self.animator().frame = newSize
        }, completionHandler: {
            Swift.print("completed")
    })
}

1 ответ

Примерно на полпути есть анимация Smooth NSView Scale Animation, которая, кажется, подходит для того, что вы ищете. Поскольку вы масштабируете и сохраняете вид галопом, он также решает эту проблему.

https://www.advancedswift.com/nsview-animations-guide/#smooth-nsview-scale-animations

Другие вопросы по тегам