UIView animateWithDuration artefact(视图上闪烁的白色垂直线)

时间:2013-04-25 08:05:11

标签: objective-c xcode animation uiview uiviewanimation

我在数字时钟中有数字分频器的简单闪烁动画。 视图层次结构如下所示:

  • ClockBGView
    • StartButton
    • ClockView

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;
        }];
    }]; 
}

是错误还是功能?我做错了什么?

1 个答案:

答案 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];
        }];
    }]; 
}

我不确定,但这段代码可以帮助你......祝你好运