我一直在使用 NSTimer 根据用户设置的频率淡入/淡出我的应用程序中的一些图像。例如,如果用户将频率设置为 5 秒,则每 5 秒将执行以下代码:
[UIView animateWithDuration:someInterval
delay:0
options:UIViewAnimationCurveEaseInOut
animations:
^{
// UI alpha = ... code here
}
// off...
completion:^(BOOL finished){
[UIView animateWithDuration:someOtherInterval
delay:yetAnotherValue
options:UIViewAnimationCurveEaseInOut
animations:
^{
// UI alpha = ... code here
}
completion:nil
];
}
];
(确切的代码并不重要,只是淡入/淡出的整体概念。)然而,正如 StackOverflow 和各种网站上的许多人指出的那样,使用 NSTimer 会导致动画卡顿,因为它与帧率。所以我尝试改用 CADisplayLink :
// in viewDidAppear:
timer_count = 0;
CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(checkTimer)];
displayLink.frameInterval = 1;
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
-(void)checkTimer
{
timer_count++;
if(timer_count >= 1500)
{
[self doFadeInOutAnimation];
timer_count = 0;
}
}
但这并没有达到预期的效果;图像只是以非常快速的连续显示,而不是每 5 秒等待淡入/淡出。
知道什么是正确的方法吗?