选择行时TableViewController中的两个动画

时间:2015-11-06 16:04:31

标签: ios uitableview animation

我正在实施TableViewController。除了UITableViewCellStyleNavigationControllerTitle的较小问题(我想我可以自己解决它们),我一直在试着如何实现一些动画。请注意,我已经搜索了很多主题(这也是Can you do custom animations for UITableView Cell Inserts?)并尽可能多地搜索,我不知道如何调用我必须做的事情。所以我把它弄清楚了。 poorly drawed animation

左边有几个小的随机彩色矩形单元格。当我单击单元格时,此矩形会在全宽度上展开,而不会覆盖CellText。

第二个动画同时发生,它会插入一些带有图像的阵列,向下扩展并向下滑动。

我真的试着写这个,但我能做的就是将整个视图向右滑动,无处可去。

这是我的.m档案,我想我应该继续努力。如果我要粘贴你的任何其他部分,请告诉我。

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    int selectedRow = indexPath.row;
    NSLog(@"touch on row %d", selectedRow);
    [self animate]; 
}
- (void)animate
{
    [[self.tableView visibleCells] enumerateObjectsUsingBlock:^(UITableViewCell *cell, NSUInteger idx, BOOL *stop) {
        [cell setFrame:CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
        [UIView animateWithDuration:0.2 animations:^{
            [cell setFrame:CGRectMake(320, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
        }];
    }];
}

感谢您的耐心等待,请理解我真的很想了解如何做到这一点。

2 个答案:

答案 0 :(得分:1)

  

我真的试着写这个,但我能做的就是滑动   整个视图向右,无处可去。

是的,看起来这就是你在这里发布的代码所做的。您将获取所有可见单元格(不仅仅是已选中的单元格)并将它们全屏移动到右侧(屏幕外)。

我想你要做的就是告诉单元格将该矩形颜色向右扩展。所以在-tableView:didSelectRowAtIndexPath:中向单元格发送一条消息来修改自己:

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyTableViewCell *cell = (MyTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
    [cell setExpanded:YES animated:YES];
}

现在,单元格负责将背景颜色设置为其全宽度。 -setExpanded:YES animated:只是我编写的方法名称。您可以在应用程序中调用任何有意义的内容。它可能看起来像这样(用Safari编写,所以不要指望完美):

- (void)setExpanded:(BOOL)expanded animated:(BOOL)animated
{
    _expanded = expanded;  // Assumes you have a property for this.

    CGRect frame = self.colorView.frame;
    if (expanded) {
        frame.size.width = self.contentRect.bounds.size.width;
    }
    else {
        frame.size.width = 40.0f;
    }

    [UIView animateWithDuration:0.2 animations:^{
        self.colorView.frame = frame;
    }];
}

向下滑动其他内容有点困难。此内容是单元格的一部分,新单元格还是在表格视图中添加的视图?我可能会将其添加为新单元格,因此您可以使用表格视图的常规插入动画将其设置为动画。

答案 1 :(得分:0)

我找到了答案的一半。 整个屏幕上的动画非常棘手,但我在其他程序员的帮助下做到了。

 -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    int selectedRow = indexPath.row;
    NSLog(@"touch on row %d", selectedRow);


    PrototypeCell *prototypeCell =(PrototypeCell *)[tableView cellForRowAtIndexPath:indexPath];
    if (prototypeCell.stretched == NO){
    [UIView animateWithDuration:1 animations:^{
        prototypeCell.View.frame = CGRectMake(0, 0, 320, 120);}
                     completion: nil];
        prototypeCell.stretched = YES;}
    else {
        [UIView animateWithDuration:1 animations:^{
            prototypeCell.View.frame = CGRectMake(0, 0, 15, 120);}
                         completion: nil];
        prototypeCell.stretched = NO;
    }
}

我必须创建PrototypeCell才能获得对视图的访问权限。这是解决问题的一半。 :) 当我第二次触摸它时它甚至会回滚。