UICollectionView セルがあります。ユーザーがそれを選択すると、カスタム ナビゲーション コントローラー アニメーションを次の viewController ビューに実行しようとしています。
基本的に私は
- 新しいView Controllerのビューをサブビューとして追加する
- 新しいビューのフレームをできるだけ小さく設定する (つまり、0.01、0.01)
- 新しいビュー フレームの中心を選択した collectionView セルの中心に設定する
- 次に、新しいビューのフレームを [[UIScreen mainScreen] 境界] に等しくなるように変更するアニメーション ブロックを実行します。
- 最後に onComplete で、新しい viewController をプッシュします。
SO アニメーションがセル フレーム内から開始されていることがわかります (ただし、中央に配置されていません)。セル フレームが画面の下隅にある場合でも、画面の縦長の寸法に拡大されます。どっちがいい。
問題は横向きモードで、寸法はまだ縦向き仕様に拡張されています。[[UIScreen mainScreen] bounds] の値は回転後に変更されるべきではありませんか?
これがコードです
DetailsViewController *details = [[DetailsViewController alloc] initWithItem:item];
[[self view] addSubview:details.view];
details.view.frame=CGRectMake(0, 0, 0.01, 0.01);
details.view.center = cell.center;
[UIView animateWithDuration:[duration floatValue] animations:^{
details.view.frame = [[UIScreen mainScreen] bounds];
}
completion:^(BOOL finished){
[[self navigationController] pushViewController:details animated:NO];
}];