1

カスタムセグエを使用して2つのビューコントローラー間でクロスディゾルブしようとしていますが、セグエは適切に開始され、意図したとおりにアニメーションを実行します。ただし、横向きモードの場合、アニメーションの間、宛先のビューコントローラーが縦向きのレイアウトで表示されます。アニメーションが完了すると、宛先のビューコントローラがその横向きのレイアウトに「スナップ」します。両方のビューコントローラは、自動レイアウトを使用して設定されます。

以下は私のカスタムセグエの「実行」方法です。

- (void)perform
{
  UIViewController *srcController = self.sourceViewController;
  UIViewController *dstController = self.destinationViewController;
  dstController.view.transform = srcController.view.transform;

  [UIView transitionFromView:srcController.view 
                      toView:dstController.view 
                    duration:self.animationDuration 
                     options:self.animationOptions 
                  completion:self.animationCompletionBlock];
}

表示する前に、宛先ビューコントローラに自動レイアウトをトリガーするように手動で指示する必要がありますか?もしそうなら、これはどのように実行されますか?クロスディゾルブで組み込みのセグエを使用してもこの問題は発生しないようです。カスタムセグエではないことを(成功せずに)判断しようとしました。

これは私をしばらく困惑させました、どんな助けでもありがたいです、そしてもっと詳細が必要であるならば私に知らせてください。

4

1 に答える 1

2

したがって、この問題の解決策は、私が想像していたよりも簡単であることがわかりました。次の行を追加すると、宛先のViewControllerが要素をレイアウトするときに正しい境界を持つことが保証されます。

dstController.view.bounds = srcController.view.bounds;

したがって、残りのコードは次のようになります。

- (void)perform
{
  UIViewController *srcController = self.sourceViewController;
  UIViewController *dstController = self.destinationViewController;
  dstController.view.transform = srcController.view.transform;
  dstController.view.bounds = srcController.view.bounds;

  [UIView transitionFromView:srcController.view 
                      toView:dstController.view 
                    duration:self.animationDuration 
                     options:self.animationOptions 
                  completion:self.animationCompletionBlock];
}
于 2012-10-04T13:53:52.860 に答える