0

UICollectionView セルがあります。ユーザーがそれを選択すると、カスタム ナビゲーション コントローラー アニメーションを次の viewController ビューに実行しようとしています。

基本的に私は

  1. 新しいView Controllerのビューをサブビューとして追加する
  2. 新しいビューのフレームをできるだけ小さく設定する (つまり、0.01、0.01)
  3. 新しいビュー フレームの中心を選択した collectionView セルの中心に設定する
  4. 次に、新しいビューのフレームを [[UIScreen mainScreen] 境界] に等しくなるように変更するアニメーション ブロックを実行します。
  5. 最後に 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];
 }];
4

1 に答える 1

0

[[UIScreen mainScreen] 境界] は向きに依存しません。代わりにスーパービューのフレームを使用することを検討してください。

于 2013-07-22T21:53:09.823 に答える