我希望特殊UITableViewCell
s闪烁其边框。问题是我无法同步边框闪烁,我的细胞“随机”闪烁。
这是我尝试过的。我有self.borderAnimationStartDate
来设置初始时间点。我将在显示单元格时添加闪烁动画,并尝试为单元格图层设置“时间偏移”(beginDate
)。
- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// ...
if (myCondition)
{
Z9EmptySlotCell* emptySlotCell = (Z9EmptySlotCell*)cell;
emptySlotCell.isNew = YES;
[emptySlotCell.backgroundCellView.layer addAnimation:self.borderAnimation forKey:@"color"];
emptySlotCell.backgroundCellView.layer.beginTime = -[[NSDate date] timeIntervalSinceDate:self.borderAnimationStartDate];
}
}
}
- (CABasicAnimation*)borderAnimation
{
if (!_borderAnimation)
{
_borderAnimation = [CABasicAnimation animationWithKeyPath:@"borderColor"];
_borderAnimation.fromValue = (id)[UIColor colorWithRed:255.0/255.0 green:231.0/255.0 blue:153.0/255.0 alpha:1].CGColor;
_borderAnimation.toValue = (id)[UIColor clearColor].CGColor;
_borderAnimation.duration = 2;
_borderAnimation.repeatCount = HUGE_VALF;
}
return _borderAnimation;
}
答案 0 :(得分:0)
您还可以使用NSTimer实现此功能。
在viewController中,将NSTimer声明为属性或实例变量。我们称之为blinkTimer
。
blinkTimer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(blinkCells) userInfo:nil repeats:YES];
[blinkTimer fire];
blinkCells方法可以为每个可见单元设置动画,如下所示:
-(void)blinkCells
{
NSArray *cells = [self.tableView visibleCells];
for (UITableViewCell *cell in cells)
{
[cell.layer addAnimation:[self borderAnimation] forKey:@"color"];
}
}
请务必从repeatCount
方法中删除[self borderAnimation]
行。
编辑:为了将动画应用到所有单元格,您需要像这样收集它们:
NSMutableArray *cells = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < [self.tableView numberOfSections]; ++i)
{
for (NSInteger j = 0; j < [self.tableView numberOfRowsInSection:i]; ++j)
{
[cells addObject:[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:j inSection:i]]];
}
}
您最初可以收集它们并将单元格存储在属性或实例变量中。