【发布时间】:2014-05-10 19:04:40
【问题描述】:
我是核心动画的新手,我正在为一件事苦苦挣扎 - 如何将自动布局与核心动画结合起来。实际上我在Core Animation的文档中只找到了一句话,这里指的是Autolayout
记得将视图约束更新为动画的一部分 如果您使用基于约束的布局规则来管理视图的位置,则必须删除任何可能干扰动画的约束,作为配置该动画的一部分。约束会影响您对视图的位置或大小所做的任何更改。它们还会影响视图与其子视图之间的关系。如果您要对这些项目中的任何一项进行动画更改,则可以删除约束,进行更改,然后应用所需的任何新约束。
但正如我所尝试的那样,一切都不像看起来那么严格。 这是我的场景。
我设计了一个广泛使用自动布局的滑动菜单。这是该视图的外观。
我正在使用自动布局约束来强制在滑动菜单中按比例定位这些项目。实际上那里有很多限制,我不想在我的问题中发布所有这些限制,甚至可能不需要直接回答这个问题,但是如果你需要它们,我可以用这些更新帖子约束。
您在 gif 中看到的动画仅通过自动布局实现。我只是在滑动菜单的高度约束中添加了outlet,并以这种方式进行了更改:(代码是使用Xamarin Monotouch编写的,但我相信对于纯iOS开发人员来说应该清楚这里做了什么)
private void AnimateSlideMenuAppearance()
{
float height;
if (isSlideMenuShown) {
height = 0;
} else {
height = slideMenuHeight;
}
UIView.Animate (0.4,
delegate {
this.slideMenuHeightConstraint.Constant = height;
this.View.LayoutIfNeeded ();
},
delegate {
isSlideMenuShown = !isSlideMenuShown;
});
}
现在我想获得更复杂的外观过渡。 CLICK HERE 看看我想要达到的效果。
只是为了尝试,我尝试使用一系列CABasicAnimations 来实现该动画的消失部分,但没有成功,我得到了奇怪的行为。
有人可以建议我在这里应该做什么吗?是否可以使用自动布局来计算视图的位置,但以某种方式覆盖自动布局大小更改之间的动画?我的意思是在我的具体示例中,不是按比例减小菜单中所有按钮的大小,而是我需要向它们添加 FadeOut 动画,将边界设置为零,并从根本上增加按钮到按钮的动画开始时间以获得效果我想要的。或者我可能需要完全摆脱自动布局并手动计算尺寸和动画?
在这种情况下,最佳做法是什么 - 当您有复杂的自动布局并且您需要在自动布局更改之间自定义 Core Animation 过渡时?我希望我很好地描述了这个问题。 谢谢你的回答。
【问题讨论】:
标签: ios xamarin.ios core-animation autolayout