UICollectionView多个单元格(UICollectionViewCell)在Objective-C中闪烁同步
Posted
技术标签:
【中文标题】UICollectionView多个单元格(UICollectionViewCell)在Objective-C中闪烁同步【英文标题】:UICollectionView multiple cell(UICollectionViewCell) blinking synchronisation in Objective-C 【发布时间】:2019-08-25 07:01:27 【问题描述】:我有一个类似UICollectionViewCell
的问题,我必须同时闪烁多个单元格。但是现在如果一个单元格闪烁然后如果我同时选择另一个单元格而不是最后一个项目停止闪烁并且该项目开始闪烁。我想闪烁标签文本。
有两个问题:
-
如果我向上或向下滚动,我想闪烁它不应该影响或更新单元格。它应该会一直闪烁。
多个单元格闪烁
请我已经花了很多时间,但我不知道如何解决。
现在尝试: 我现在已经试过了:
它解决了我的错误单元格闪烁问题。但是现在多个单元格一起闪烁我不知道如何解决这个问题
cell.pricePlate.alpha = 0;
[UIView animateWithDuration:1.0f delay:0.1f options:UIViewAnimationOptionCurveLinear animations:^
[UIView setAnimationRepeatCount:3.0];
cell.pricePlate.alpha = 1;
cell.pricePlate.textColor = RED;
completion:^(BOOL finished)
NSLog(@"cell12 -> %ld %ld",(long)cell.tag, (long)indexPath.row);
cell.pricePlate.alpha = 1;
if(self.cellIdToBlink <= 0)
cell.pricePlate.textColor = BLACK;
else
cell.pricePlate.textColor = GREEN;
];
之前尝试过: 我以前也试过这个:
这是在单元格类中。像打电话一样
[cell blinking];
这个问题是,如果我向下滚动并出现一个闪烁,它会闪烁并更新错误的单元格。也消除闪烁。我认为这是因为在执行选择器时它无法找到正确的单元格。所以它随机闪烁。
int counter = 1;
for (int i = 0; i<3 ; i++)
if(i == 2)
[self performSelector:@selector(animateColor1234:) withObject:color afterDelay:1.5*counter];
++counter;
else
[self performSelector:@selector(animateColor1234:) withObject:BLACK afterDelay:1.5*counter];
++counter;
-(void) animateColor1234:(UIColor *)color
[UIView transitionWithView:_pricePlate duration:1 options: UIViewAnimationOptionTransitionCrossDissolve animations:^
_pricePlate.textColor = RED;
completion:^(BOOL finished)
if (finished)
[UIView transitionWithView:_pricePlate duration:1 options:UIViewAnimationOptionTransitionCrossDissolve animations:^
_pricePlate.textColor = BLACK;
completion:^(BOOL done)
if (done)
// Do some program upkeep logic
_pricePlate.textColor = color;
];
else
_pricePlate.textColor = color;
];
我测试的最后一个动画:
CABASE 动画:
我不知道如何用它为文本设置动画。它仅用于背景和前景
这是如何让单元格出队
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CarCellID" forIndexPath:indexPath];
if(thisItemToBlink)
cell.pricePlate.alpha = 0;
[UIView animateWithDuration:1.0f delay:0.1f options:UIViewAnimationOptionCurveLinear animations:^
[UIView setAnimationRepeatCount:3.0];
cell.pricePlate.alpha = 1;
cell.pricePlate.textColor = RED;
completion:^(BOOL finished)
NSLog(@"cell12 -> %ld %ld",(long)cell.tag, (long)indexPath.row);
cell.pricePlate.alpha = 1;
if(self.cellIdToBlink <= 0)
cell.pricePlate.textColor = BLACK;
else
cell.pricePlate.textColor = GREEN;
];
else
//just change text as not selected item
return cell;
【问题讨论】:
请任何帮助将不胜感激...... 【参考方案1】:如果我理解正确,如果你想在标签上做动画,无限次使用: UIView.animate(withDuration: 2.0, delay: 0, options: [.repeat, .autoreverse], 动画:
确保在不需要时不调用集合视图上的 reloadData 方法。
还要检查集合视图上的 UI 操作是否在主线程上完成。
【讨论】:
[UIView setAnimationRepeatCount:3.0];不,我想要有限的时间而不是无限的时间 我正在使用同一个兄弟...检查 cell.pricePlate.alpha = 0; [UIView animateWithDuration:1.0f 延迟:0.1f 选项:UIViewAnimationOptionCurveLinear 动画:^ [UIView setAnimationRepeatCount:3.0]; 问题是多个动画同步......如果选择了多个项目...... 兄弟,我检查了它,可能是这个问题:确保在不需要时不调用集合视图上的 reloadData 方法现在告诉我另一件事,比如当我在运行时调用 firebase 时调用重新加载数据,这就是我认为它正在做的原因......我如何解决这个问题,就像对我来说很重要的两件事一样 1)重新加载数据 2)调用 firebase 2) 应该首先调用 firebase,但这取决于您是否有分页(例如,您一次只获取 20 个项目,然后在需要时获取下一个 20 个项目)或一次全部获取。最后一个更简单,您可以在 viewDidLoad 1) 上调用它,只有在从 firebase 收到结果后,您应该重新加载 collectionView。您可以使用 reloadItems(at: ) 重新加载某些单元格,而不是全部【参考方案2】:这是一种解决方法。
我假设你现在使用重用单元格/项目。
问题的根本原因是重用功能。
所以,你可以尝试不使用重用方式。
UITableView中使用了波纹管代码,但我相信你可以很容易地修改它。
替换 cellForRowAtIndexPath 中的重用单元代码:
cell = [tableView dequeueReusableCellWithIdentifier:@"YourCellIdentifier"];
到:
NSArray *nibObjs = [[NSBundle mainBundle] loadNibNamed:@"YourCellNibName" owner:nil options:nil];
if(nibObjs)
cell = [nibObjs objectAtIndex:0];
【讨论】:
让我试一试...你不觉得会很贵吗? 是的,会的。但是有两个原因, 1. 如果 UI 不是很复杂或者超过 100 个单元格,我认为就可以了。 2.你的单元格/项目需要闪烁或其他动画,如果使用应该对停止/开始动画进行其他控制的重用功能,它可能会很昂贵。以上是关于UICollectionView多个单元格(UICollectionViewCell)在Objective-C中闪烁同步的主要内容,如果未能解决你的问题,请参考以下文章
在 UICollectionView/UITableView 中为滚动视图的偏移设置动画会导致单元格过早消失