1

ウィンドウを所有するAppDelegateがあり、そこからメインビューがあり、そこから次のビューに移動すると、同じナビゲーションコントローラーとツールバーを使用するために新しいビューをプッシュします。

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    self.appview = [[AppointmentView alloc] initWithNibName:@"AppointmentView" bundle:[NSBundle mainBundle]];

    @synchronized(self.MahAppntmnts){                             // Set the view's appointment
        [appview setMyAppointment:[[MahAppntmnts MyAppointments] objectAtIndex:indexPath.section]];
    }
    [super addChildViewController:self.appview];
    AppDelegate *del = (AppDelegate *)[UIApplication sharedApplication].delegate;
    [UIView  beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.75];
    [del.navigationController pushViewController:self.appview animated:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
    [UIView commitAnimations];
}

これでビューの切り替えには問題なく機能しますが、戻ろうとすると、同じ退屈なフリップトランジションが発生します。AppViewのviewWillDissapearデリゲートメソッドを設定してみました。

-(void) viewWillDisappear:(BOOL)animated 
{
    [UIView  beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
    [UIView commitAnimations];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelay:0.375];
    [self.navigationController popViewControllerAnimated:NO];
    [UIView commitAnimations];
    [super viewWillDisappear:animated];
}

これは、前のビューに戻ったときに機能するようですが、(以前と同じ方法を使用して)新しいビューに移行しようとすると、表示されないか、同じビューに切り替えます。だから私はこのコードがviewWillDissapearにあるべきではないか、私が何か間違ったことをしていると推測しています...

4

1 に答える 1

1

さて、私は解決策を見つけました。問題は、アニメーションが「誰」に属しているかについての私の誤解でした。viewWillDissapear(プッシュされたビューにある)にあるコードを、最初にプッシュを行ったビューのviewWillAppearデリゲート(accessoryButtonTappedForRowWithIndexPathにあるコード)に追加しました。これにより、制御ビューが別のビューをプッシュしたときにアニメーションを開始します。 、および別のビューがそのビューに戻ると、逆のアニメーションが表示されます。すべての問題を解決し、魅力のように機能します。

于 2012-05-31T17:19:53.967 に答える