使用持续时间占用CPU和RAM的UIVIew动画

时间:2014-07-29 16:02:36

标签: objective-c uiview

以下方法为两个其他视图之间的视图的透明度设置动画。 它的问题是: 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];
                                          }];
                     }];
}

2 个答案:

答案 0 :(得分:1)

如果它永远存在,那么更好的方法就是这样......

[UIView animateWithDuration: 2
                      delay: 0.0
                    options: UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAutoReverse | UIViewAnimationOptionRepeat
                 animations:^{
                     self.avatarLogoHaloImageView.alpha = 0.0;
                 }
                 completion:nil];

这应该永远重复动画,然后在等等中淡出...

另外,因为它是一个单一的函数,所以你不会得到每次都会添加到调用堆栈的递归调用......或者其他东西......

无论如何,请试一试。

无需一次又一次地运行它。只需运行一次。

答案 1 :(得分:0)

我假设animateFade是此函数,因此您在此处将canRestartFade属性设置为YES,并且您正在检查它是否设置为{{1}然后这种创建无限循环,这也可能是你100%CPU使用的原因。