gpt4 book ai didi

iphone - 你能缓存 UIViewControllers 吗?

转载 作者:行者123 更新时间:2023-11-28 23:18:20 24 4
gpt4 key购买 nike

我有一个包含 8 个 UIViewController 的应用程序,通过从左/右/上/下导航来呈现。它们在应用程序启动时创建并保存在 NSArray 中。在任何时候,它们中只有 1 个被添加到 View 树 (addSubview:) - 其余的只是坐在缓存中,直到需要它们。

现在我遇到的问题是旋转到横向时。只有当前可见的 View 将 bounds.size 更改为 Landscape。当导航到下一个 View 时,该 View 仍然认为它是纵向的(但包含的 View 将全部看起来是横向的)。

顺便说一句,应用程序的 View 层次结构如下:UIWindow -> Main UIViewController -> 8 个缓存 UIViewController 中的 1 个。

例如:* 改变方向:- 主 UIViewController.view.bounds.size = 480x300(确定)- 缓存的 UIViewControllers 之一 view.bounds.size = 480x300 (OK)* 转到下一个 View :- 主 UIViewController.view.bounds.size = 480x300(确定),- 另一个缓存的 UIViewControllers view.bounds.size = 320x460 (??)

不确定发生了什么。我是否必须以某种方式告诉缓存的 UIViewControllers 方向/大小发生了变化或其他什么?

非常感谢

最佳答案

是的,你可以。最佳情况下,您应该清除每个 View Controller 在离开屏幕时管理的 View 。

只需将 nil 分配给要替换的 View Controller 的 view 属性。这将释放无论如何都不可见的 View 使用的所有资源。作为额外的好处,只要您决定再次将特定的 View Controller 放在前面,就会使用适当的框架重新创建 View 。

我还假设您正在实现的是 UIViewController 的子类,它充当其他 View Controller 的容器。就像名为 CWGridController 或类似名称的 UITabController 的兄弟。请注意,父 View Controller (您的子类)有责任根据需要调整其 subview Controller View 的框架大小。

创建容器 View Controller 不是一项小任务,Apple 对它的支持并不完整。您必须做一些事情,包括但不限于:

  • 将所有方向更改调用转发给所有 subview Controller 。
  • 根据需要正确调用 subview Controller 上的所有出现/消失。

让它发挥作用的最后一部分是打破一些规则。 View Controller 的工作非常糟糕,除非他们知道它们的父 View Controller ,布局将是错误的并且模态视图 Controller 表现得很奇怪。不幸的是 parentViewController 是只读的,或者你会这么想。无论如何使用 KVC 设置它会解决大多数问题,并且当您提交到 App Store 时 Apple 似乎并不反对:

[childViewController setValue:self forKey:@"parentViewController"];

关于iphone - 你能缓存 UIViewControllers 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4671364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com