我有一个简单的表格视图,我正在使用一个UIImage
和一些标签的自定义单元格。
我想设置图片大小的动画,因为我在cellForRowAtIndexPath
方法中添加了以下内容:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"customCell";
NotificationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[NotificationTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
if( [[[notification objectAtIndex:[indexPath section]] valueForKey:@"readed"] isEqualToString:@"readed"])
{
[UIView animateWithDuration:0.9
delay:0.3
options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionRepeat
animations:(void (^)(void)) ^{
cell.imgIcon.transform=CGAffineTransformMakeScale(0.8, 0.8);
}
completion:^(BOOL finished){
cell.imgIcon.transform=CGAffineTransformIdentity;
}];
}
return cell;
}
当我启动应用程序时,它运行正常,只有“readed”单元格使用UIViewAnimationOptionRepeat选项在bucle中动画。
当我滚动桌面视图时,问题就开始了。一些“readed”单元停止动画,并且每个单元格中的单元格动画时间循环不同。
有什么想法吗?
谢谢
编辑:我认为问题在于可重复使用的细胞。
答案 0 :(得分:0)
你说“我尝试重新加载tableview,但这不起作用。” (原文如此)
您尝试重新加载表格视图的时间和方式?回应一个 是否正在调用UIApplicationWillEnterForegroundNotification消息处理程序?发布该代码。
我会在你的cellForRowAtIndexPath方法中添加一个日志语句,以确保它被调用,并记录正在更新的indexPath。
您是否确定每次应用回到前台时,都希望表格视图的每个单元格中的图像都有动画效果。这似乎很烦人。
答案 1 :(得分:0)
正如Duncan所说,重新加载tableView会导致动画发生。确保断点/记录动画以确保代码实际到达那里。一旦你弄清楚如何通过重新加载表再次发生动画,你可以添加两个NSNotificationCenter标注,让应用知道在应用程序从后台恢复活动时重新加载表。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
只需设置合适的选择器来处理和重新加载表格:
e.g
- (void)appDidBecomeActive:(id)sender {
[_tableView reloadData];
}