创建一个带有条件NOT动画启动屏幕的动画加载框架

时间:2014-04-21 13:16:01

标签: ios animation nsthread

我的应用程序中的一些视图控制器在加载时会进行一些非常密集的图像处理。

所以我喜欢做的是创建一个全屏动画图像(我已经知道如何处理图像视图)并继续动画,直到视图控制器完全可以使用。我知道我必须为这个动画创建另一个线程(我认为)并且以某种方式使这个图像循环直到某个条件为TRUE?任何人都有任何好的教程分享或有一些有用的代码。我在网上找到的所有内容都是动画启动图像教程,只是程序员已经设置了一段时间......没有任何教程解释如何在特定条件为真之前这样做

1 个答案:

答案 0 :(得分:1)

诀窍不是将其视为等待周期。您应该将其视为两个不同的事件:加载已启动,加载已完成。

加载开始时,您创建托管.gif的图像视图,并显示它:

[self.imageView startAnimating];
[self.view addSubview:self.imageView];

或者,如果你想让它淡入:

self.imageView.alpha = 0;
[self.imageView startAnimating];
[self.view addSubview:self.imageView];
[UIView animateWithDuration:0.5 animations:^{
    self.imageView.alpha = 1.0;
}];

然后,当加载完成时,您只需要再次淡出它:

[UIView animateWithDuration:0.5 animations:^{
    self.imageView.alpha = 0;
} completion:^(BOOL finished) {
    [self.imageView stopAnimating];
    [self.imageView removeFromSuperview];
}];

请参阅this github project了解如何将.gif分解为帧并使用UIImageView为其设置动画。使用这种方法,您无需关心加载需要多长时间。您的imageView将显示并自动保持循环,直到您明确删除它为止。

修改

如果您想使用UIKit进行自定义动画,可以将动画放入自动重复(和自动反转?)动画块中:

[UIView animateWithDuration:0.5
                      delay:0.0
                    options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat
                 animations:^{
                     // Do some animation
                 } completion:nil];

然后,在加载完成时取消动画:

[self.view.layer removeAllAnimations];