0

我写了一个小客户调查应用程序,在顶部我有一张汽车和一辆货车的图像,我假装它们正在放大。但是我编写它的方式将它变成了一个无限循环,其中一种方法调用另一种方法,反之亦然。这就是动画永远播放的原因。

这是我的代码

-(void)doAnimate {

    // animate van
    [UIView animateWithDuration:1.0
                          delay:7.f
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^{

                         vanView.frame = CGRectMake(770, 175, vanView.frame.size.width, vanView.frame.size.height);

                     } completion:^(BOOL finished) {
                         if (finished) {
                             [self doAnimateLoop];
                         }
                     }];

    // animate car
    [UIView animateWithDuration:1.0
                          delay:3.f
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^{

                         carView.frame = CGRectMake(-600, 250, carView.frame.size.width, carView.frame.size.height);

                     } completion:^(BOOL finished) {
                         if (finished) {

                         }
                     }];
}

-(void)doAnimateLoop {


    vanView.frame = CGRectMake(-600, 175, vanView.frame.size.width, vanView.frame.size.height);
    carView.frame = CGRectMake(770, 250, carView.frame.size.width, carView.frame.size.height);


    // second animation van
    // animate van
    [UIView animateWithDuration:1.0
                          delay:2.f
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^{

                         vanView.frame = CGRectMake(111, 175, vanView.frame.size.width, vanView.frame.size.height);

                     } completion:^(BOOL finished) {
                         if (finished) {

                         }
                     }];

    // animate car
    [UIView animateWithDuration:1.0
                          delay:5.f
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^{

                         carView.frame = CGRectMake(104, 250, carView.frame.size.width, carView.frame.size.height);

                     } completion:^(BOOL finished) {
                         if (finished) {
                             [self doAnimate];
                         }
                     }];

}

我想知道这是否会在将来导致应用程序出现任何问题?像内存泄漏或可能导致它崩溃的东西。

任何帮助将不胜感激。

4

2 回答 2

0

如果你小心的话,无限循环不一定是坏事。

您需要确保在不需要动画时停止动画,因为它会占用宝贵的 CPU 时间。这会使您的应用程序响应缓慢,因为它在不需要时花费 CPU 时间进行动画处理。

当视图不再附加到活动窗口时,您可以停止动画(参见下面的代码),当您离开视图控制器时就是这种情况。

/**
 * doAnimate
 * Animates view with a call back to its self for infinite animation, stops on view unload.
 */
-(void)doAnimate
{
    //view is active, animate. else stop
    //this will stop the animation when the view is unloaded
    if (self.view.window)
    {
        //Animate your views
    }
}

根据内存泄漏,如果您有良好的编码标准和实践,内存泄漏很少见。如果您担心或怀疑内存泄漏,那么您可以使用通常的工具(即Instruments)来检查内存使用情况。

根据您的代码,基本实现看起来不错。祝你好运。

于 2014-02-24T11:53:27.697 回答
-2

如果它在单独的线程中运行,则进入无限循环不是问题。问题是你能处理内存。由于循环是无限的,即使是最小的泄漏也会导致崩溃。如果您怀疑自己的手很脏,我建议您使用一些有效执行此操作的 api 并将其留在手中

于 2013-02-20T06:13:23.030 回答