4

我有一个UITableView显示 static 的控制器tableview。我必须更新项目以提供辅助模式,该模式tableview应该翻转并显示不同的数据。我的方法是将两种模式的所有静态单元格放在一个大的 statictableview中,执行翻转并隐藏在特定时刻不需要的单元格。翻转应仅在 上执行tableviewcontrollerview,因此不影响navigationbar主或主tabbar。到目前为止,我一直在尝试使用的代码来实现这个简单的魔术技巧是:

// Transition using a page flip.
    [UIView transitionFromView:self.tableview
                        toView:self.tableview
                      duration:0.7
                       options:UIViewAnimationOptionTransitionFlipFromLeft
                    completion:^(BOOL finished) {
                        if (finished) {
                           /* HIDE NOT REQUIRED CELL */

                        }
                }];

不幸的是,结果是黑屏。知道如何解决吗?

4

3 回答 3

8

尝试使用以下代码:

[UIView transitionWithView:self.tableView 
                   duration:0.7
                   options:UIViewAnimationOptionTransitionFlipFromLeft 
                   animations:^{
                          /* any other animation you want */
                  } completion:^(BOOL finished) {
                          /* hide/show the required cells*/
                  }];
于 2013-02-19T16:01:06.787 回答
1

我认为主要问题是,视图最多可以有一个超级视图。这意味着一个视图不能同时出现在两个地方。我会尝试将视图捕获为图像并将其添加到动画之前的超级视图中,并从其超级视图中删除真实的表格视图。然后您可以在两个不同的视图(图像视图和表格视图)之间制作动画。在完成块中,只需删除图像视图。

如何捕获视图:如何捕获当前视图屏幕截图并在代码中重用?(iPhone SDK)

于 2013-02-19T15:53:10.600 回答
1

我已经使用稍微不同的技术完成了这一点。也许它对你有用。基本结构是有一个 MainContainerView ,里面是一个 MapView (在你的情况下是一个表格视图)。当我做翻转动画时,我抓取一个单独的视图控制器(列表视图)的视图并将其作为子视图添加到 MainContainerView 并从子视图中删除 MapView。当我想向后翻转时,我会做相反的事情。

-(void)listViewButtonHandler:(id)sender
{
    if (_isMap) { //transition to view 2

        self.listViewController.view.frame = self.mainContainerView.bounds; //grab the view of a separate VC

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1.0];
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
                               forView:self.mainContainerView
                                 cache:YES];
        [self.mapContainerView removeFromSuperview];
        [self.mainContainerView addSubview:self.listViewController.view];

        [UIView commitAnimations];
        self.navigationItem.leftBarButtonItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"mapButton"] target:self action:@selector(listViewButtonHandler:)]; //change the button to another title

        _isMap = NO;
    } else {
        //transition to view 1
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1.0];
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
                               forView:self.mainContainerView
                                 cache:YES];
        [self.listViewController.view removeFromSuperview];
        [self.mainContainerView addSubview:self.mapContainerView];

        [UIView commitAnimations];
        _isMap = YES;
        self.navigationItem.leftBarButtonItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"actualListButton"] target:self action:@selector(listViewButtonHandler:)]; //change the button back

    }
}

我希望这会有所帮助,并且可以适用于您的情况!

于 2013-02-19T15:58:27.227 回答