使用重复和滚动动画UITableViewCells

时间:2015-03-16 16:30:30

标签: ios objective-c uitableview animation tableviewcell

我有一个简单的表格视图,我正在使用一个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”单元停止动画,并且每个单元格中的单元格动画时间循环不同。

有什么想法吗?

谢谢

编辑:我认为问题在于可重复使用的细胞。

2 个答案:

答案 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];
}