- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有没有办法让 drawRect 动画从上一个场景到下一个场景?
(令人惊奇)您可以在 drawRect 中制作动画 - 试试吧。您可以淡入淡出、平移或动画化任何其他属性。
但是,它“从新鲜开始”,从空白开始。 因此,例如,如果您在 drawRect 中放置一个淡入动画 block ,则之前的场景会消失并新场景将从白色淡出。
我希望屏幕从之前的图像(在 drawRect 的前一个循环中绘制)淡化到我刚刚绘制的新图像... err, am绘图。
有没有办法做到这一点,也许是通过操纵 drawRect 发生的事情来巧妙地做到这一点?
这似乎是一个非常常见的用例 - 从一个场景混合到下一个场景。
有人知道这个 secret 吗?
当然,显然这可以在核心动画环境或许多其他方式中完成,但是让 drawRect 从一个 drawRect 淡出到下一个 drawRect 是一个显而易见的想法。干杯。
惊人的更新感谢 WrightCS 的天才......
多亏了 WrightCS,我们现在知道 drawRect 可以完美地处理动画。只需将此代码粘贴到任何 drawRect 的末尾并尝试一下:
self.alpha = 0.0;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2];
self.alpha = 1.0;
[UIView commitAnimations];
它将整个 drawRect,无论多么复杂,都视为一个巨大的 block ,并将其包裹在该动画中。是的,它甚至包括在屏幕外区域绘制、位图渲染或其他任何内容。一切都变得生动起来。谁知道?
手头的问题 - 如何让它从前一个场景开始动画而不是从空白开始?
最佳答案
Drawrect 是不可见的。它发生在 iOS 仅当您准备好使用 drawRect 时才显示在屏幕上的“后备缓冲区”中。所以你绝对不能在 drawrect 中设置动画。但是,您几乎可以从任何地方提交动画指令,包括 drawrect。但是动画会在之后执行。
动画需要定时并向用户显示不同的帧。
您完全可以自己完成(不断地强制重绘并每次在 drawrect 中做一些稍微不同的事情),但这是很多工作,特别是如果您希望它正确完成。
幸运的是,iOS 有许多为您编写的动画效果。使用 Core Animation,或 UIKit 中的(更简单和基本的)动画。但由于它通过动画某些 View 属性(例如整个 View 的 alpha 或整个 View 的旋转,...)来工作,您可能需要重新排列您的 View 和 subview 以充分利用它。
例如每个马肢都是单独的 subview ,您可以为它们的转换设置动画(不需要重绘,iOS 会完成其余的工作)
例如旧框架和新框架是两个独立的 View ,您将新框架(位于顶部)从 alpha 0 设置为 alpha 1。
关于iphone - 我要动画,其实淡入淡出, "within"drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4730110/
我是一名优秀的程序员,十分优秀!