有没有办法让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];
它将整个drawRect视为一个巨大的块并将其包装在该动画中,无论它有多复杂。是的,它甚至包括在屏幕外区域绘制,位图渲染或其他任何东西。一切都变得生动了。谁知道?
手头的问题 - 如何让它从前一个场景开始动画而不是从空白开始?
答案 0 :(得分:4)
画笔是不可见的。它发生在“backbuffer”中,只有当你准备好使用drawRect时,iOS才会在屏幕上显示。所以你绝对不能在画笔中制作动画。但是,您可以从几乎任何地方提交动画指令,包括drawrect。但动画将在之后进行。
动画需要定时并向用户显示不同的帧。
你可以自己完成这一切(不断地强制重绘并且每次都做一些略微不同的事情),但这是很多工作,特别是如果你想要做得好的话。
幸运的是,iOS为您编写了许多动画效果。使用Core Animation,或UIKit中的(更简单和基本)动画。但由于它通过动画视图的某些属性(例如整个视图的alpha,或整个视图的旋转,......),你可能需要重新排列视图和子视图以充分利用它。
E.g。每个马肢都是独立的子视图,你可以设置它们的转换动画(不需要重绘,iOS将完成剩下的工作)
E.g。旧框架和新框架是两个独立的视图,您可以将新框架(位于顶部)设置为从alpha 0到alpha 1的动画。
答案 1 :(得分:4)
有点太晚了,但我也在搜索,this question接受的答案就像drawRect
内部的魅力一样。
答案 2 :(得分:2)
您可以为alpha设置动画:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2.0];
myObject.alpha = 0.0;
[UIView commitAnimations];
答案 3 :(得分:1)
如果您使用iOS 5.0+,则可以使用以下内容:
...
[UIView animateWithDuration:0.3
delay:0.0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
//do your stuff here
}completion:^(BOOL finished) {
//completition stuff go here
}];
...
答案 4 :(得分:0)
您可以做的最好的事情是使用两个UIView
个实例并在它们之间设置动画。
当您开始动画时,您必须知道动画的原始状态和最终状态。如果这只是一种观点,那就太难了。