我想动画,实际上是淡化,"在"drawRect中

Fat*_*tie 8 iphone cocoa-touch quartz-graphics ipad ios

有没有办法让drawRect 从上一个场景动画到下一场?

(令人惊讶的是)你可以在drawRect中制作动画 - 尝试一下.您可以淡化,翻译或动画任何其他属性.

然而,它从空白开始"从新鲜"开始. 因此,例如,如果您在drawRect中放置淡入式动画块,则前一个场景将消失,新场景将从白色淡出.

我希望屏幕从上一个图像(在上一个drawRect循环中绘制)淡化到我刚绘制的新图像...错误,正在绘制.

有没有办法做到这一点,也许通过操纵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];
Run Code Online (Sandbox Code Playgroud)

它将整个drawRect视为一个巨大的块并将其包装在该动画中,无论它有多复杂.是的,它甚至包括在屏幕外区域绘制,位图渲染或其他任何东西.一切都变得生动了.谁知道?

手头的问题 - 如何让它从前一个场景开始动画而不是从空白开始?

Wri*_*sCS 2

您可以为 Alpha 设置动画:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2.0];
myObject.alpha = 0.0;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)

  • 不,你不能在drawRect: 内部这样做!在另一个地方做这件事,不用担心在你的drawRect中设置动画: (5认同)