我在数字时钟中有数字分频器的简单闪烁动画。 视图层次结构如下所示:
当StartButton
按下ClockView
变为可见时(它超过按钮)并开始每秒闪烁数字分频器的动画。但是动画开始后几分钟就会出现闪烁的白线。您可以在此视频中看到它:
https://dl.dropboxusercontent.com/u/1680228/ANIMATION_ARTEFACT.MOV
- (void)updateTimer {
NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:self.timerStartDate];
long seconds = lroundf(timeInterval); // Modulo (%) operator below needs int or long
int hour = seconds / 3600;
int mins = (seconds % 3600) / 60;
self.clockHrsLabel.text = [NSString stringWithFormat:@"%02i", hour];
self.clockMinLabel.text = [NSString stringWithFormat:@"%02i", mins];
(hour > 0) ? (self.clockHrsLabel.alpha = 1.0f) : (self.clockHrsLabel.alpha = 0.2f);
// devider animation blink
[UIView animateWithDuration:0.3 animations:^{
self.clockDeviderLabel.alpha = 1.0f;
} completion:^(BOOL complete){
[UIView animateWithDuration:0.3 animations:^{
self.clockDeviderLabel.alpha = 0.0f;
}];
}];
}
是错误还是功能?我做错了什么?
答案 0 :(得分:3)
这个问题可以通过两种解决方案来解决。
首先:
我认为在动画完成之前,计时器会再次重复。 基本上你有两个动画都有0.3秒的持续时间。 所以你可以在每1秒后调用一次计时器方法,因为总动画 持续时间为0.6
或
第二个是:
请勿使用计时器并使用以下代码....
- (void)updateTimer {
NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:self.timerStartDate];
long seconds = lroundf(timeInterval); // Modulo (%) operator below needs int or long
int hour = seconds / 3600;
int mins = (seconds % 3600) / 60;
self.clockHrsLabel.text = [NSString stringWithFormat:@"%02i", hour];
self.clockMinLabel.text = [NSString stringWithFormat:@"%02i", mins];
(hour > 0) ? (self.clockHrsLabel.alpha = 1.0f) : (self.clockHrsLabel.alpha = 0.2f);
// devider animation blink
[UIView animateWithDuration:0.25 animations:^{
self.clockDeviderLabel.alpha = 1.0f;
} completion:^(BOOL complete){
[UIView animateWithDuration:0.25 animations:^{
self.clockDeviderLabel.alpha = 0.0f;
} completion:^(BOOL complete){
[self updateTimer];
}];
}];
}
我不确定,但这段代码可以帮助你......祝你好运