我写了一个小客户调查应用程序,在顶部我有一个汽车和一辆面包车的图像,我假装正在缩放。但是我编码的方式把它变成了一个无限循环,其中一个方法调用另一个方法,反之亦然。这就是动画永远播放。
这是我的代码
-(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];
}
}];
}
我想知道这是否会导致该应用程序出现任何问题?比如内存泄漏或可能导致其崩溃的东西。
任何帮助将不胜感激。
答案 0 :(得分: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)来检查内存使用情况。
根据您的代码,它看起来很适合基本实现。 祝你好运。
答案 1 :(得分:-2)
如果它在一个单独的线程中运行,那么进入无限循环不是问题。问题是你可以处理内存吗?因为循环是无限的,即使最微小的泄漏也会导致崩溃。我建议你使用一些有效的api,如果你怀疑你的手脏了就把它留在手中