0

私はアニメーションを行っているので、最初の画面でボタン MyAccount をクリックすると、アカウント ビューに移動します。

- (void)pushToAccount
{
    AccountViewController *controller = [[AccountViewController alloc] initWithNibName:@"AccountViewController" bundle:nil];
    //[self.navigationController pushViewController:controller animated:NO];

    [UIView  beginAnimations: @"Showinfo"context: nil];
    [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.75];
    [self.view addSubview:controller.view];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:NO];
    [UIView commitAnimations];

}

ただし、Account View Controller (いくつかのボタンと画像ビューが含まれています) をクリックすると、プログラムがクラッシュし、メイン クラスに EXC_BAD_ACCESS が表示されます。

この問題についてアドバイスをお願いします...

4

3 に答える 3

1

ビューコントローラは、現在のビューのサブビューとして別のビューコントローラのビューを追加することにより、トランジションをアニメーション化しようとしています。これは、多くの次元で問題があります。特に、新しいView Controller自体では何もしていません...これがARCプロジェクトの場合は、リリースされます。

あるViewControllerから別のViewControllerに移行するだけの場合は、通常、標準pushViewController:animated:またはを実行する必要がありますpresentModalViewController:animated:。前者をやっていたようです。なぜそれを現在のコードに置き換えたのですか?

何をしようとしていたのか、なぜ標準のトランジションを使用していないのかを教えていただければ、さらにサポートできる可能性があります。

アップデート:

デフォルトのアニメーションが気に入らないが、トランジションにカスタムアニメーションが必要な場合は、次のようにすることができます。

CustomAnimationViewController *yourNewViewController = [[CustomAnimationViewController alloc] initWithNibName:@"CustomAnimationView" bundle:nil];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[self.navigationController pushViewController:yourNewViewController animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
[UIView commitAnimations];

// if you're using ARC, you don't need this following release, but if you're not using ARC, remember to release it

// [yourNewViewController release];

アップデート2:

そして、論理的なフォローアップの質問を予想して、新しいView Controllerの却下をどのようにアニメーション化するか、たとえば、次のようなメソッドを呼び出す「完了」ボタンがある場合があります。

- (IBAction)doneButton:(id)sender 
{
    [UIView beginAnimations:nil context:nil];
    [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];
}
于 2012-06-01T14:42:46.367 に答える
0

私は次の行を使用すると思います

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.window cache:YES];

あなたの怒鳴る行のinsted..

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:NO];

これがあなたの助けになることを願っています... :)また、必要に応じてアニメーションのために以下のコードを使用してください....

CATransition *animation = [CATransition animation];
    [animation setDelegate:self];   
    [animation setType:kCATransitionFromBottom];
    [animation setDuration:1.0];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:
                                  kCAMediaTimingFunctionEaseInEaseOut]];
    [[self.window layer] addAnimation:animation forKey:kAnimationKey];

ここでは、ウィンドウの代わりにビューを使用します。そうでない場合、ウィンドウは正常に動作します.. :)

于 2012-06-01T13:15:10.793 に答える
0

私の推測では、押されたときにメソッドUIButtonを呼び出すpushToAccountがあり、押されたときにそのメソッドが見つからないということです。メソッドのシグネチャにオブジェクトが含まれていないことが原因である可能性があります。したがって、メソッドを次のように変更すると、

- (void)pushToAccount

- (void)pushToAccount:(id)sender

問題が解決する場合があります。pushToAccountメソッドを含むオブジェクトが、そのメソッドが呼び出される前に解放されていないことを確認することも重要です。おそらく、NSLogメッセージまたはブレークポイントを内部deallocに入れて、呼び出されないようにします。

于 2012-06-01T13:05:34.500 に答える