古いビューの中心から新しいビューを拡大し、そのビューがフェードアウトする単純なアニメーションがあります。ただし、この新しいビューのサブビュー (ボタンとラベル) は、新しいビューが拡大して画面全体を占めるようになると、画面の右下から「フライ」インします。autolayout をオンにして、またはオフにして試してみましたが、2 つのシナリオで異なる結果が得られますが、どちらも間違っています。
セットアップは簡単です。ストーリーボードに 2 つの接続されていないビュー コントローラーがあり、次のコードを使用してビューの変更をアニメーション化します。
-(void)switchViews2:(id)sender {
UIWindow *win = self.view.window;
YellowController *yellow = [self.storyboard instantiateViewControllerWithIdentifier:@"Yellow"];
yellow.view.frame = CGRectMake(0, 0, 1, 1);
yellow.view.center = self.view.center;
[win addSubview:yellow.view];
CGRect frame = self.view.frame;
[UIView animateWithDuration:5 animations:^{
yellow.view.frame = frame;
self.view.alpha = 0;
}
completion:^(BOOL finished) {
[self.view removeFromSuperview];
win.rootViewController = yellow;
}];
}
問題は、サブビューがアニメーション化されているときに、サブビューがスーパービュー内の本来あるべき場所にとどまらない理由です。