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