Objective c UIVIew使用持续时间制作动画占用CPU和RAM

Objective c UIVIew使用持续时间制作动画占用CPU和RAM,objective-c,uiview,Objective C,Uiview,下面的方法为位于两个其他视图之间的视图的透明度设置动画。 它的问题是: 1) 它从不停止 2) CPU:107%并持续增加内存(直到应用程序崩溃) 如何使其停止动画制作,并且在动画制作过程中不使用100%的CPU和内存在一分钟内增加到1GB: -(void)animateFade { if(!self.canRestartFade){ return; } self.canRestartFade = NO; [UIView animateWithD

下面的方法为位于两个其他视图之间的视图的透明度设置动画。 它的问题是: 1) 它从不停止 2) CPU:107%并持续增加内存(直到应用程序崩溃)

如何使其停止动画制作,并且在动画制作过程中不使用100%的CPU和内存在一分钟内增加到1GB:

-(void)animateFade
{
    if(!self.canRestartFade){
        return;
    }
    self.canRestartFade = NO;

    [UIView animateWithDuration: 2
                          delay: 0.0
                        options: UIViewAnimationOptionCurveEaseIn
                     animations:^{
                         self.avatarLogoHaloImageView.alpha = 0.0;
                     }
                     completion:^(BOOL finished){
                         // Wait one second and then fade in the view
                         [UIView animateWithDuration:2
                                               delay: 1.0
                                             options:UIViewAnimationOptionCurveEaseOut
                                          animations:^{
                                              self.avatarLogoHaloImageView.alpha = 1.0;
                                          }
                                          completion:^(BOOL finished){
                                              self.canRestartFade = YES;
                                              [self animateFade];
                                          }];
                     }];
}

如果它永远持续下去,那么更好的方法就是这样

[UIView animateWithDuration: 2
                      delay: 0.0
                    options: UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAutoReverse | UIViewAnimationOptionRepeat
                 animations:^{
                     self.avatarLogoHaloImageView.alpha = 0.0;
                 }
                 completion:nil];
这将永远重复动画,然后淡出,等等

另外,因为它是一个单一的函数,所以您不会得到每次都会添加到调用堆栈中的递归调用。。。或者别的什么

无论如何,试试看


不需要一次又一次地运行它。只运行这一行。

我假设
animateFade
是这个函数,所以既然您在这里将
canrestartfead
属性设置为
YES
,并且您正在检查它是否设置为
NO
,那么这种循环会创建无限循环,这也可能是您100%CPU使用率的原因。

哦,他想让它停下来。我猜想他不想让它停止。lolYes,这样你的解决方案会更好,但我们在这里都有点猜测,因为我们无法确定animateFade函数做什么,我只是从上下文中假设的。:)更新的问题。。。我只想让它在屏幕上显示动画你想让它显示多少次?或者,如果不是数字,您希望它何时停止动画制作?当包含视图(logoHaloImageView)的视图控制器离开屏幕时。。(最终将推送到导航堆栈上)。。。我认为它应该只在屏幕上显示动画。也许在这里添加一个变量“isVisibleView”,然后在我的答案中使用该方法。当视图控制器不再在屏幕上时,它将不会设置动画。试试看,我想你会很高兴它工作得很好。