1

UIViewControllerロゴが中央にありUITableView、アルファ 0のものが 1 つあります。

私はこれviewDidAppear:を持っています:

[UIView animateWithDuration:0.6 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{
    [self.logo setFrame:CGRectMake(0.0f, self.view.frame.size.height - 194.0f, 320.0f, 194.0f)];
} completion:^(BOOL finished) {
    [self.table setFrame:CGRectMake(0.0f, 0.0f, 320.0f, self.view.frame.size.height - 194.0f)];

    [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{
        [self.table setAlpha:1.0];
    } completion:^(BOOL finished) {
        return;
    }];

    return;
}];

わかりました、アニメーションは私が欲しいものです。

しかし、presentModalViewController:次のビューを表示するために呼び出すとUIImageView、画面の中央にUITableView戻り、前の高さに戻ります。

ビューを変更しても、アニメーションを終了した後、同じサイズと位置を維持するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

1

viewDidLoadモーダルがシステムメモリをクリアしない限り、これで元のフレームを設定しても問題ないと思います。ビューは可能な限りキャッシュされます。したがって、モーダルがそれをリセットするのに十分なメモリを使用する場合viewDidLoad、ビューをリセットするために再度呼び出されます。

これに対処するための迅速で簡単な方法は、dismissViewController:animated:メソッドを使用している場合はメソッドに必要な値を設定するか、モーダルのデリゲートメソッドを設定することです。

これらのいずれも持っていない場合は、これが最初のロードであるかどうかを何らかの方法でチェックする必要があります。しかし、これはそれに対処するためのクリーンな方法ではありません。さらにコードを表示すると、より良い解決策を見つけることができるかもしれません。

于 2013-01-16T20:17:07.597 に答える
0

注: 間違った options 定数を使用しています。ではなくUIViewAnimationCurveEaseInOut、 を使用する必要がありますUIViewAnimationOptionCurveEaseInOut。それはおそらくあなたの問題には影響しませんが、悪いことです。

returnまた、完了ブロックにステートメントは必要ありません。

viewWillDisappear および viewDidDisappear メソッドのコードを確認します。ビューをリセットしている初期レイアウトをそこで(またはlayoutSubviewsでも)実行している可能性があります。

于 2013-01-16T19:47:47.823 に答える