我正在尝试在弹出窗口中重现可导航视图的 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:
我的动画组之外执行弹出框大小动画。我的上下文的持续时间没有受到尊重,并且我的动画在弹出框的大小更改完成之前不会发生。
如何让我的视图与弹出框的大小变化一起动画?