uiviewcontroller - 横向自定义 UIViewController 动画的解决方法?

标签 uiviewcontroller ios7 modalviewcontroller

我有一个自定义的动画 UIViewController 过渡,似乎 iOS 中有一个错误会破坏横向布局。在主要动画方法中,我得到了横向和纵向 View 的混合。 (纵向 View 都是纵向的,所以没问题。)

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;
{
  UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
  UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
  UIView *containerView = [transitionContext containerView];

  // fromViewController.view => landscape, transform
  // toViewController.view => portrait, transform
  // containerView => portrait, no transform

  [containerView addSubview:toViewController.view];

  // ...animation... //
}

我知道 frame当 View 具有转换时,属性不可靠 - 所以我猜这是问题的根源。在横向模式下,to/from viewControllers View 具有 90 度顺时针变换 [0 -1 1 0]。我尝试使用 bounds/center 来调整 View 的大小和位置,以及移除变换然后重新应用它,但 UIKit 与我抗争并坚持将 View 显示为纵向。恼人的!

在截图中,深灰色是 UIWindow 背景,红色是添加的模态视图 Controller ,应该覆盖整个屏幕。

the red view is in portrait

有人找到解决方法吗?

最佳答案

好的,修复非常简单:

将 toViewController 框架设置为容器 之前 将 View 添加到容器中。

toViewController.view.frame = containerView.frame;
[containerView addSubview:toViewController.view];

更新:仍然存在一个限制,因为您不知道框架的方向。它最初是纵向的,但是当它显示在屏幕上时会拉伸(stretch)成横向。如果您想从右侧滑入 View ,在横向中它可能会从“顶部”滑入(如果查看其他景观,则可能从底部滑入!)

关于uiviewcontroller - 横向自定义 UIViewController 动画的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013929/

相关文章:

ios - 如何录制没有声音的视频?

ios - 奇怪的模态视图 Controller NSException 错误

ios - 从 UICollectionViewCell 复制 Apple iOS Podcast.app 模态视图 Controller

ios - 在 Swift 中从其 UIViewController 访问 UIView

ios - 点击注释时将数据传递给另一个 View Controller

ios - 在另一个带有有效负载的 UITabBarController VC 中触发 segue?

ios - 点击后隐藏 View

ios - xcode 屏幕大小是固定的 - 每个设备都不会改变

ios7 - 我可以为iOS7专用的应用程序转储非Retina图像吗?

objective-c - 在 iOS 5.1 中显示模态视图 Controller 后,UIScrollView 无法正常运行