【发布时间】:2013-02-09 00:51:43
【问题描述】:
我正在尝试在弹出窗口中重现 iTunes 11 可导航视图的行为。不过,我似乎无法找到一种方法让我的动画在弹出框的 contentSize 更改发生的同时发生。
我的基本设置是一个自定义视图子类 MyPopoverNavigationView,它有两个子视图:我希望弹出框在旧视图和新视图之间导航。弹出框的contentViewController 有一个MyPopoverNavigationView 实例作为它的view。我这样做:
// Configure constraints how I want them to show the new popover view
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *ctx) {
[ctx setDuration:0.25];
[ctx setAllowsImplicitAnimation:YES];
[self layoutSubtreeIfNeeded];
} completionHandler:nil];
据我从 Auto Layout WWDC 2012 视频中得知,这是为约束更改导致视图帧更改设置动画的推荐方法。它可以工作,但动画分两个阶段进行:
- 首先,弹出框的
contentSize将更改以适应我要移动到的新视图(在该视图变得可见之前,因此它会部分遮盖现有内容)。 - 其次,视图按照我的预期进行动画处理,从而满足我安装的约束系统。
通过设置一些断点,看起来-layoutSubtreeIfNeeded 最终在弹出框上调用了一个名为_fromConstraintsSetWindowFrame: 的私有方法,它在我的动画组之外执行弹出框大小的动画。我的上下文的持续时间没有受到尊重,并且我的动画在弹出框的大小更改完成之前不会发生。
如何让我的视图与弹出框的大小变化一起动画?
【问题讨论】:
标签: cocoa animation autolayout nspopover