Objective c UIVIew使用持续时间制作动画占用CPU和RAM
下面的方法为位于两个其他视图之间的视图的透明度设置动画。 它的问题是: 1) 它从不停止 2) CPU:107%并持续增加内存(直到应用程序崩溃) 如何使其停止动画制作,并且在动画制作过程中不使用100%的CPU和内存在一分钟内增加到1GB: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
-(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”,然后在我的答案中使用该方法。当视图控制器不再在屏幕上时,它将不会设置动画。试试看,我想你会很高兴它工作得很好。