如果UITableView轻轻滚动,动画可以正常工作,快速滚动时不起作用

时间:2014-09-06 05:07:27

标签: ios uitableview uilabel

我使用以下代码在自定义UITableViewCell内闪烁标签:

-(void) startBlinker
{
    [self stopBlinker];
    self.edgeCaseLabelTimer = [NSTimer scheduledTimerWithTimeInterval:.5 target:self selector:@selector(blinkEdgeCaseLabel) userInfo:nil repeats:YES];

    [[NSRunLoop currentRunLoop] addTimer:self.edgeCaseLabelTimer
                                 forMode:NSRunLoopCommonModes];
}


-(void) blinkEdgeCaseLabel
{
    if (blinkCycle == 0)
    {
        [UIView transitionWithView:self.thisCustomCell.edgeCaseLabel duration:1.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
            self.thisCustomCell.edgeCaseLabel.textColor = [UIColor clearColor];
        } completion:nil];

        blinkCycle = 1;
    }
    else if (blinkCycle == 1)
    {
        [UIView transitionWithView:self.thisCustomCell.edgeCaseLabel duration:1.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
            self.thisCustomCell.edgeCaseLabel.textColor = [UIColor redColor];
        } completion:nil];

        blinkCycle = 0;
    }
}

我希望有更优雅和现代的代码,但是它有效。至少它是有效的,只要我不用力滚动电视。轻轻地,工作正常。快速,标签在一个(或其他)状态下保留(当休息时)并且不闪烁。

受影响的唯一细胞是顶部和底部细胞(这是唯一具有闪烁标签的细胞,而不是巧合)。

我已尝试使用scrollViewDidEndScrollingAnimationscrollViewDidEndDecelerating再次将其置于行动中,但没有骰子。

有什么想法吗?

注意:我正在模拟器上测试这个&不在设备上。

修改:

按照@ Woodstock的建议,我改用了常规的NSTimer。另外,我合并了这段代码:

-(BOOL)topOrBottomCellIsVisible
{
    NSArray *indexes = [self.myTableview indexPathsForVisibleRows];

    for (NSIndexPath *index in indexes)
    {
        if (index.row == 0)
        {
            return YES;
        }

        if (index.row == detailFRC.fetchedObjects.count - 1)
        {
            return YES;
        }
    }

    return NO;
}
来自@Devunwired的

在他对this question的回答中做出了贡献。我将此方法放在与出现和滚动相关的几个关键位置。

现在事情似乎更加强大了,但我认为@Fahim Parkar可能会在sim上运行,而不是在设备上运行。我说“更强大”而不是“治愈”,因为虽然眨眼似乎更能抵抗快速滚动,但在初始出现相关细胞时它仍然不会自动启动。我在设备上试用时会报告。

0 个答案:

没有答案