1

这是我设备上的视图的屏幕截图。

Ipad 截图

我在这里遇到的设计问题是屏幕的顶部始终是静态的——就其位置而言。屏幕的其余部分是以编程方式添加到此视图的一排按钮。箭头表示您可以在 4 个方向(从顶部、从底部、从左侧和从右侧)滑动的想法,这会将新视图动画化到屏幕上。此视图与之前的视图相同。事实上,所有这些视图都是相同的实例,但按钮会有所不同。(我不想在这里太具体。)

我现在的设计要求提前预加载视图。每个视图的每个按钮的数据将在核心数据中。我不会提前知道有多少视图。一个视图可能只有一个右侧视图,您可以从右侧滑入,并且该视图可能有一个顶部和底部箭头 - 这将允许您从底部或顶部滑动,这将是另一个视图(相同的 UIView 子类)。所以基本上是一棵视图树。

我想我正在尝试找出我的选择。NavigationController 并不是我真正想要的,因为我不需要导航栏,尽管在我看来,这里有一个视图控制器数组是有道理的,每个视图控制器的视图属性指向每个分配的视图,然后作为我滑动我会通过使用视图控制器索引来引入适当的视图。(通过一些动画代码)

另一个可能的选择是 UIScrollView ,但这看起来很麻烦,可能不是我真正想要的。

最简单的设置之一是创建一个 XIB 文件,该文件将包含屏幕的顶部和底部的空 UIView,我将以编程方式填充按钮(及其唯一数据)。我对此感到困惑的问题是,我将如何以这种方式交换视图。我想我可以让 rootViewcontroller 成为第一个视图的第一个 viewcontroller 实例,然后交换它们。

我想我想看看是否有人有任何问题或建议来提出最简单(最模块化)的方法来在不同的视图中滑动。使用视图控制器数组是否可行?

4

2 回答 2

0

一个 Xib 对您来说就足够了(无论如何,对于您应用程序的这一部分)。

不要使用 UINavigation 控制器。NavController 比喻是一堆卡片中的一张。你没有那个数据结构。

一般的想法是一个 ViewController 用于一屏内容。如果您觉得需要两个视图控制器(一个用于顶部,一个用于底部),那么您将不得不查看自定义容器控制器,以确保包含的控制器正确接收它们的实例方法(viewDidLoad、viewWillAppear、 ETC)。管理一对 viewController 的示例容器控制器是 iPad splitViewController。但我认为你不需要这样做。

我建议在屏幕的下半部分放置一个 scrollView 并使用它来管理您的数据视图。如果屏幕的上部也需要改变(在其他条件下),你甚至可以有两个滚动视图,一个在顶部,另一个在下面。它们可以分页,并包含与相应屏幕部分精确大小的视图。他们可以共享他们的单个包含 viewController 作为其委托方法的公共位置。

我真的无法为您提供更多详细信息,因为我对您想要实现的目标没有足够的了解。也许您应该尝试其中一种方式来实现它,并在您的想法变得具体时带着更多问题回到这里。从最简单的想法开始(例如,在单个 viewController 中的滚动视图),只有当你发现你必须打破它时才把它扔掉!

根据您的评论进行更新
,我认为 scrollView 可能对您有用。我认为使用自定义容器控制器(正如 Rob 建议的那样)管理一堆视图控制器可能会变得过于复杂。您将必须创建自己的自定义容器控制器,诸如 UINavigationController 之类的预先存在的容器控制器适合您的数据结构(无论如何我都可以收集)。

您不需要管理大量的 UIView,实际上您只需要 5 个 - 一个用于滚动视图的屏幕部分,一个用于屏幕的左右两侧,同样用于上方和下方的一个。您可以在滑动时重用这些视图,就像 tableView 重用它们的单元格一样。剩下的部分将是关于操作您的数据,以便正确的内容在它们出现在屏幕上时排列在视图中。

有关此问题的更多想法,请参阅我对这个问题的回答:UICollectionView 水平连续循环

于 2013-01-12T19:58:23.050 回答
0

几个想法:

  1. 这对我来说是自定义容器视图控制器(如果是 iOS 5 及更高版本)。请参阅iOS 视图控制器编程指南中的创建自定义容器视图控制器。

  2. 你谈到了使用UISwipeGestureRecognizer. 你也可以一直考虑UIPanGestureRecognizer。有连续的手势很好。考虑阅读一本书,其中页面滑动会跟踪您的手指,但您可以停止并返回,中间手势。当然,现在从滑动手势开始,但如果您的用户体验适合它,您可以随时考虑在未来使用连续手势。

  3. 您说您计划“提前预加载视图”。通常,鉴于移动设备的内存容量有限,您会希望比这更保守。也许加载当前视图,以及您可能会在四个方向中的每一个方向上访问的四个视图(以便您可以立即呈现它们),但不要这样做。一旦您到达四个可能的目的地之一,然后继续释放当前无法到达的目的地,并准备好那些可以到达的目的地。

于 2013-01-12T20:02:15.977 回答