我使用以下代码在自定义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;
}
}
我希望有更优雅和现代的代码,但是它有效。至少它是有效的,只要我不用力滚动电视。轻轻地,工作正常。快速,标签在一个(或其他)状态下保留(当休息时)并且不闪烁。
受影响的唯一细胞是顶部和底部细胞(这是唯一具有闪烁标签的细胞,而不是巧合)。
我已尝试使用scrollViewDidEndScrollingAnimation
和scrollViewDidEndDecelerating
再次将其置于行动中,但没有骰子。
有什么想法吗?
注意:我正在模拟器上测试这个&不在设备上。
修改:
按照@ 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上运行,而不是在设备上运行。我说“更强大”而不是“治愈”,因为虽然眨眼似乎更能抵抗快速滚动,但在初始出现相关细胞时它仍然不会自动启动。我在设备上试用时会报告。