如何解决NSView 动画没有动画
我正在尝试通过更改其前导约束的值来为 NSView 设置动画。
这是我的约束对象:
@IBOutlet weak var vModDatesLeading: NSLayoutConstraint!
以及我用来为其位置设置动画的代码:
@IBAction func getModDates(_ sender: Any) {
NSAnimationContext.runAnimationGroup({ context in
//Indicate the duration of the animation
context.duration = 0.5
vModDatesLeading.constant = 0
vModDatesLeading.animator()
vModDatesWrapper.layoutSubtreeIfNeeded()
},completionHandler:nil)
}
它在移动,但在跳跃,而不是动画。如果这是 iOS,我会添加:
view.layoutIfNeeded()
但这不是 NSView 的选项。我试过 layoutSubtreeIfNeeded()
但那没有。
任何帮助将不胜感激。
解决方法
这些天我主要在 iOS 上工作,并且认为我从未使用过 NSAnimationContext。我挖了一点,看来你需要添加一行
context.current.allowsImplicitAnimation = true
在 runAnimationGroup 闭包的主体内。
编辑:
我刚刚注意到这条线
vModDatesLeading.animator()
在您的代码中。那没有任何作用。这个想法是你应该为你正在制作动画的对象获取一个动画代理,并将你的更改应用到该代理。因此你的代码应该是:
NSAnimationContext.runAnimationGroup({ context in
//Indicate the duration of the animation
context.duration = 0.5
vModDatesLeading.animator().constant = 0
vModDatesWrapper.layoutSubtreeIfNeeded()
}
(请注意,我尚未对此进行测试。我认为无需 context.current.allowsImplicitAnimation = true
即可工作,但我必须对其进行测试才能确定。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。