gpt4 book ai didi

iphone - 我要动画,其实淡入淡出, "within"drawRect

转载 作者:可可西里 更新时间:2023-11-01 03:10:39 26 4
gpt4 key购买 nike

有没有办法让 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com