【发布时间】:2018-11-07 09:05:06
【问题描述】:
我正在开发一个 macOS 应用程序,该应用程序在具有图层支持的视图的视图层次结构中使用自动布局。该应用程序使用带有多个子视图的NSStackView,每个子视图都有一个折叠/展开按钮来调整相应子视图的大小。子视图的大小调整是通过添加和删除布局约束来实现的,并且动画上下文用于动画大小变化。我按照WWDC 2013, Session 213, starting at about minute 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()
})
}
调整大小动画按预期工作。
我的问题:如果我触发了调整大小动画,并且包含聚焦的 UI 元素的子视图被动画到一个新位置,它的焦点环立即跳转从它的开始到它的UI 元素本身正确动画时的最终位置。
知道我做错了什么吗?
【问题讨论】:
-
谢谢。但我见过其他应用程序(例如 Mac 的 OmniFocus)似乎可以在对焦环中完成动画。我想知道他们是怎么做到的。
-
你的意思是NSStackView的superview?是的。
-
好吧,我帮不上忙;我只能告诉你的是,我在使用你描述的技术的 NSStackView 动画上遇到了很多问题,以至于在一个应用程序中我完全放弃了 NSStackView。
标签: cocoa autolayout core-animation