4

UITableViewstatic を表示するコントローラーがありますtableviewtableviewこれが反転して異なるデータを表示することになっているセカンダリモードを提供するプロジェクトを更新する必要があります。私のアプローチは、両方のモードのすべての静的セルを 1 つの大きな statictableviewに配置し、反転を実行し、その特定の瞬間に必要のないセルを非表示にすることです。反転は でのみ実行する必要があるため、または メインtableviewcontrollerviewには影響しません。この単純な手品を実現するためにこれまで使用しようとしてきたコードは次のとおりです。navigationbartabbar

// 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

私は少し異なるテクニックを使用してこれを達成しました。おそらくそれはあなたにとって有用です。基本的な構造は、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 に答える
1

主な問題は、ビューが最大1つのスーパービューを持つことができるということだと思います。つまり、ビューを同時に2つの場所に配置することはできません。ビューを画像としてキャプチャし、アニメーションの直前にスーパービューに追加して、スーパービューから実際のテーブルビューを削除してみます。次に、2つの異なるビュー(画像ビューとテーブルビュー)間でアニメーション化できます。完了ブロックで、画像ビューを削除するだけです。

ビューをキャプチャする方法:現在のビューのスクリーンショットをキャプチャしてコードで再利用する方法は?(iPhone SDK)

于 2013-02-19T15:53:10.600 に答える