我在我的智慧结尾试图想出一个这种范例的设计模式。我在这个网站上没有多少运气,但在这个阶段我会尝试任何事情。UIView无限循环动画在每个重复循环后调用一个方法
我试图实现一个雷达类型的动画,因此我旋转的视图360度来表示半径周围的圆旋转。我已经在这个圆周上放置了点,并且能够使用标准的trig来计算圆心的角度。
作为围绕圆半径扫描,如果它与一个点相交(例如,点的角等于扫半径+公差的角度)的点上闪烁。
现在,我已经在很多的方式来实现这种模式,但都没有取得理想的解决方案。这是我尝试过的。
FIRST:iOS4动画块。我会一次旋转半径10度,持续时间为0.1秒,在完成方法中,检查与点的交点。这里的问题是,如果您将该选项设置为重复,则不会调用完成方法。调用完成方法的唯一时间是整个动画终止时,而不是每个重复循环之后,因此此解决方案不起作用。
SECOND:尝试使用CABasicAnimation显式动画。与上述方法相同,每0.1秒旋转10度,并将委托设置为自我并实现animationDidFinish方法。在animationDidFinish方法中,我检查了与点的交点。我将动画设置为累积并重复拍摄以获得巨大价值。该raduis旋转,但再次,animationDidFinish不会被调用,除非我将repeatCount设置为一个小数字,然后它只在repeatCount结束时被调用,而不是在每个重复循环之后。
第三:使用的NSTimer和这种方法确实有效,但动画可以根据是什么在屏幕周围发生的是生涩。我使用0.1秒的计时器刻度,并启动10度的单个动画以及每次刻度的交叉检查。这种方法的问题在于,由于处理器在后台执行其他动画,因此在启动每个动画时容易受到阻碍。请注意,我没有其他两种方法的问题!
第四:我尝试使用两者的组合。点上的CABasicAnimation和点上的NSTimer。这里的问题是,如果iDevice进入休眠状态,然后恢复,它们可能会不同步并发生。
FIFTH:使用iOS3.0风格动画块并用.1sec持续时间旋转10度。使用animationDidStop方法设置委托和animationDidStopSelector,再次调用动画方法以及检查与点的交集。这也起作用,但很像第三种解决方案,当滚动和其他动画发生时,它很干。这很可能是由动画的停止启动性质引起的。
基本上是有没有办法无限动画视图但要调用每一个重复周期后的方法?或者有没有办法让第三个解决方案更顺利?
请帮助,我已经用尽了设计模式。
我认为你的应用程序是opengles的好选择,它会处理你想要做的很棒的性能。如果你想使用框架,你甚至不需要3D以便更容易看看cocos2D。 – Ben 2010-10-13 01:08:51
是的,我听到你说,问题是我到目前为止已经学到了很多,我不知道我想重新开始。 – 2010-10-13 03:31:55
我想我正在接近答案,使用第二种解决方案,我可以保留CABasicAnimation对象并在animationDidStop方法中重新应用它。它肯定不是生涩的,但我在累积部分遇到麻烦。 – 2010-10-13 06:15:53