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

标签 iphone ios ipad cocoa-touch quartz-graphics

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

相关文章:

ios - UIStackView 内的 UITextview

ios - SpriteKit 生成随机 curl 线

ios - 在 UITableViewCell 中滑动手势 UIImageView

java - 无法使用 NSInputStream 在 iOS 客户端中读取来自 Java 服务器的响应

ios - iPad2 中的相册崩溃

ruby-on-rails - 通过本地网络将 Ruby/Rails 连接到 ipad

iphone - UIWebView完成加载事件

ios - 以编程方式禁用 iOS "Perspective Compensation"?

iphone - "Upgrade current target for ipad"变灰(禁用)?

iphone - 检测 iOS 设备向右或向左或向上或向下移动