- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是核心动画的新手,我正在努力解决一件事 - 如何将自动布局与核心动画相结合。其实我在Core Animation的文档里只找到一句话提到Autolayout here is it
Remember to Update View Constraints as Part of Your Animation If you are using constraint-based layout rules to manage the position of your views, you must remove any constraints that might interfere with an animation as part of configuring that animation. Constraints affect any changes you make to the position or size of a view. They also affect the relationships between the view and its child views. If you are animating changes to any of those items, you can remove the constraints, make the change, and then apply whatever new constraints are needed.
但正如我所尝试的那样,一切都不像看起来那么简单。这是我的场景。
我设计了一个广泛使用自动布局的滑动菜单。这是该 View 的外观。
我正在使用自动布局约束来强制按比例定位滑动菜单中的这些项目。实际上那里有很多限制,我不想在我的问题中发布所有这些限制,甚至可能不需要直接回答这个问题,但是如果你需要它们,我可以用这些更新帖子约束条件。
您在 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看看我想要达到的效果。
只是为了尝试,我尝试使用一系列 CABasicAnimation
实现该动画的消失部分,但没有成功,我得到了奇怪的行为。
有人可以建议我在这里应该做什么吗?是否可以使用自动布局来计算 View 的位置,但以某种方式覆盖自动布局大小更改之间的动画?我的意思是在我的具体示例中,我需要向它们添加 FadeOut 动画,而不是按比例减小菜单中所有按钮的大小,将边界设置为零,并从根本上增加按钮之间动画的开始时间以获得效果我想要的。或者我可能需要完全摆脱自动布局并手动计算尺寸和动画?
在这种情况下,最佳实践是什么 - 当您有复杂的自动布局并且需要在自动布局更改之间自定义 Core Animation 转换时?我希望我很好地描述了这个问题。感谢您的回答。
最佳答案
这是完全可行的,虽然它可能很复杂,因为它看起来像您想要的案例将有多个动画。
但是,我注意到您的代码中有一件事很奇怪:您更改了约束上的常量 (this.slideMenuHeightConstraint.Constant = height
)在 动画 block 中,而不是在它之前。对于我能想到的几乎所有情况,您都应该在动画 block 之前更改约束。直到下一个 UI 运行循环(或通过 setNeedsUpdateConstraints
将其强制用于下一个运行循环)或立即通过 layoutIfNeeded
时,约束才会在视觉上呈现。由于 [UIView animate:...]
正在为您执行此操作,因此 layoutIfNeeded
应该(通常)是您的动画 block 中的 唯一 , 在为自动布局设置动画时。
在您的情况下,您必须使动画有点 react 性,但是 - 例如,如果您想要像示例中那样添加这些按钮并让它们弹出、动画出来和增长。调用 layoutIfNeeded
后,您可以安全地检查帧大小。如果它超出了您的阈值(或其他一些指标),您可以触发按钮的动画。 (所以是的,这可能是我要在动画 block 中添加更多代码的情况——检查阈值、开始其他动画等)。
关于ios - 将自动布局与核心动画相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22761622/
我想做的是,如果鼠标位于“下一个”按钮上,它会以慢速向右滚动,如果鼠标没有位于“下一个”按钮上,它会停止滚动? 这是我的尝试http://jsfiddle.net/mdanz/nCCRy/14/ $(
StyleCop 是一个很棒的视觉工作室小插件。但它不会向您显示实时提示或提供任何自动修复。 随之而来的是 reSharper 和 StyleCop for reSharper,这是理想的解决方案,但
我为我的MatchQuery使用了模糊性选项,但是我想将模糊性值设置为auto。有什么办法吗? 另外,对于完成建议程序,您可以将其设置为支持unicode,对于我的MatchQuery,有什么方法可以
我想从表中获取一行[字符串名称,字符串密码,int 某些内容]并将其映射到一个 User 对象,该对象具有 3 个属性,如上面的 getter 和 setter有什么方法可以自动完成吗?我考虑过反射,
我有一个像这样的方法:void m1(string str) 并且有一个像这样的类: public class MyClass { public bool b1 { set; get; }
我正在尝试使用 $rootScope 从一个 Controller 向另一个 Controller $broadcast 一些数据。 如果我使用像 ng-click 这样的触发器来运行将广播的功能,它
我考虑了很多关于是要使用完全自动化的缓存还是手动缓存。 我们的自动方法是一种解决方案,它可以挖掘数据库、查询和格式化每个潜在和 future 的数据请求,并将其保存到适当的缓存存储(内存缓存或基于磁盘
我的 CSS 必须使用过渡来更改,直到现在我都使用 div:hover 来实现。 当您单击另一个 div 时需要激活过渡,而不是当您将鼠标悬停在必须移动/更改的 div 上时。 我该怎么做? 谢谢 永
在我的应用程序中,我需要一些动画,但如果它已经设置了动画,则不需要持续时间。但我的问题是它会自动添加持续时间。 在这里你可以看到 2 个函数,第二个没有持续时间但它确实有持续时间(可能从 1 秒开始)
两年前,我需要制作一个工具,通过 POST 自动将 txt/csv 文件上传到我的 Web 服务器,然后使用 cronjob 通过 PHP 对其进行解析。 这有两次在每天午夜自动发生。尽管这行得通,但
请阅读下面程序中的评论: #include void test(char c[]) { c=c+2; //why does this work ? c--; printf("%
也许是个幼稚的问题,但是...... 确认或拒绝: 自动和静态存储持续时间的对象/变量的内存的存在是在编译时确定的,程序运行时失败的可能性绝对为零,因为没有足够的内存用于自动对象。 自然地,当自动对象
有没有什么方法可以自动获得类中属性更改的通知,而不必在每个 setter 中都编写 OnPropertyChanged? (我有数百个属性,我想知道它们是否已更改)。 安东建议 dynamic pro
我们在使用 Azure DevOps 的项目中采用了 gitflow 流程。我有以下场景: 当功能分支合并到 Develop 时,我想在完成拉取请求的同时执行压缩合并策略 当 Release 分支定期
我的网站上有一个评论部分,我将 html 编码的评论保存在我的数据库中。所以我添加了这条评论- "testing" `quotes` \and backslashes\ and html 并将其保存在
是否存在“ checkin 前 TFS 自动 checkout ”这样的功能,以便在我说“ checkin ”之前我不会 checkout 任何文件,例如以防我只是临时更改文件 - 这一直发生。 换句
我有一个运行在 Linux/Apache/Tomcat 堆栈上的网站,它需要每隔几个月自动脱机以进行服务器维护,这将持续任意时间。有哪些选项可以让 Apache 建立和取消“服务器维护”页面? 我需要
我经常在工作中创建文档,在公司内部,由于我们使用的首字母缩写词和缩写词的数量,我们几乎拥有自己的语言。因此,我厌倦了在发布文档之前手动创建首字母缩写词和缩写表,并且快速的谷歌搜索发现了一个可以有效地为
我希望在用户或宏将计算模式从自动更改为手动或手动更改为自动时运行代码。是否有为此触发的事件? (属性是 Application.Calculation 在 Excel 互操作中。) 使用 Excel
这个问题在这里已经有了答案: Repeat command automatically in Linux (13 个回答) 6年前关闭。 我想创建一个脚本来获取另一个文件夹中的所有文件夹名称。并为这些
我是一名优秀的程序员,十分优秀!