【问题标题】:Bad animation when dismissing modal UIImagePickerController关闭模式 UIImagePickerController 时动画效果不佳
【发布时间】:2011-09-28 21:46:54
【问题描述】:

我有一个UIViewController (A),它以模态方式呈现第二个视图控制器 (B)。然后,第二个视图控制器以模态方式呈现UIImagePickerController (IP)。基本上,我有一堆 2 个模态视图控制器。

(A) --modally presents--> (B) --modally presents--> (IP)

视图控制器 (A) 是图像选择器的代表,它使用以下方法关闭整个模式堆栈:

[self dismissModalViewControllerAnimated:YES];

问题出在动画上。当像这样关闭模态堆栈时,当前可见的视图应该从屏幕底部滑出,露出新可见的视图。所以在这种情况下,我希望 (IP) 滑出屏幕底部,显示 (A) 的视图。

然而,实际发生的是:图像选择器视图简单地消失,立即显示 (A) 的视图,并且只有导航栏在屏幕底部显示动画。状态栏也保留为黑色半透明,而不是转换回标准灰色;这似乎表明图像选择器通常会执行某种“清理”,当它作为模态堆栈的一部分被解散时不会执行。

如果我用另一个通用视图控制器替换图像选择器,动画效果很好。如果 (IP) 被 (B) 解除,则动画也可以正常工作。该问题似乎仅在关闭多个包含 UIImagePickerController 的模式视图控制器时才会出现。

有人见过这个吗?任何想法我可能做错了什么或如何解决这个问题?

【问题讨论】:

  • 如果您在 A 上调用 dismissModalViewControllerAnimated 并关闭 B 而不是 IP。如果你想你必须在 B 上调用 dismissModalViewControllerAnimated,然后在 A 上调用 dismissModalViewControllerAnimated。这里没有视图控制器堆栈,视图控制器只能有一个 modalview。
  • @rckoenes 来自dismissModalViewControllerAnimated 下的UIViewController 参考:“如果您连续呈现多个模态视图控制器,从而构建了一个模态视图控制器堆栈,则在视图控制器上调用此方法in stack 将关闭其直接子视图控制器以及堆栈上该子视图控制器之上的所有视图控制器。"
  • 那是我的错,但我之前使用特殊的 viewController(如 MFMessageComposeViewController)遇到过同样的问题。它应该根据苹果文档将您带回 viewController A。它认为您应该提交错误报告。

标签: iphone ios cocoa-touch uiviewcontroller uiimagepickercontroller


【解决方案1】:

不幸的是,dismissModalViewControllerAnimated 方法并不能完全按照您的预期工作(至少在视觉上没有)。要实现您想要的,您需要连续关闭两个模态视图控制器,第一个非动画和第二个动画,如所述,例如here.

【讨论】:

  • 这种方法不会突然从图像选择器切换到 B 的解雇动画吗?
  • 不,它以非常自然的方式工作,动画从 C 到 A 的过渡;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 2019-04-12
  • 1970-01-01
  • 2015-01-11
  • 2018-05-05
相关资源
最近更新 更多