以下是我在设备上的视图的屏幕截图。
我在这里遇到的设计问题是,屏幕的顶部始终是静态的 - 就其位置而言。屏幕的其余部分是以编程方式添加到此视图的一行按钮。箭头表示您可以在4个方向(从顶部,从底部,从左和从右侧)滑动,这会将新视图设置为屏幕动画。此视图与之前的视图相同。实际上所有这些视图都是相同的实例,但按钮会有所不同。(我不想在这里过于具体。)
我的设计现在要求提前预先加载视图。每个视图的每个按钮的数据将在核心数据中。我不会提前知道有多少意见。一个视图可能只有一个右侧视图,您可以从右侧滑入,该视图可能有一个顶部和底部箭头 - 这将允许您从底部或顶部滑动,这将是另一个视图(相同的UIView子类)。所以基本上是一棵树。
我想我想弄明白我的选择。一个NavigationController并不是我想要的,因为我不需要导航栏,虽然在我看来我有一个视图控制器数组,每个都有一个视图属性指向分配的每个视图然后作为我轻扫我会通过使用视图控制器索引引入适当的视图。(通过一些动画代码)
另一种可能的选择是UIScrollView,但这似乎很麻烦,可能不是我真正想要的。
最简单的设置之一是创建一个XIB文件,该文件包含屏幕的顶部,底部是一个空的UIView,我将以编程方式填充按钮(及其唯一数据)。我对此的问题是,我将如何以这种方式交换视图。我想我可以使rootViewcontroller成为第一个具有第一个视图的viewcontroller实例,然后交换它们。
我想我想知道是否有人有任何问题或建议想出最简单(最模块化)的方法来刷不同的视图。是使用视图控制器数组的方式去?
答案 0 :(得分:0)
一个Xib足够你(无论如何你的应用程序的这一部分)。
不要使用UINavigation控制器。 NavController的比喻是一堆卡片之一。您没有该数据结构。
一般的想法是一个ViewController用于一个屏幕的东西。如果您觉得需要两个viewControllers(一个用于顶部,一个用于底部),那么您将不得不查看自定义容器控制器,以确保包含的控制器正确接收其实例方法(viewDidLoad,viewWillAppear,等等)。管理一对viewControllers的示例容器控制器是iPad splitViewController。但我认为你不需要这样做。
我建议在屏幕的下半部分放置一个scrollView,然后使用它来管理您的数据视图。如果屏幕的上半部分也需要改变(在其他条件下)你甚至可以有两个scrollViews,一个在顶部,另一个在下面。它们可以被分页,并包含与各个屏幕部分的确切大小相同的视图。他们可以将包含viewController的单个内容共享为其委托方法的公共位置。
我无法真正帮助你提供更多细节,因为我对你想要实现的目标缺乏足够的了解。也许你应该尝试以这些方式之一来实现它,并在你的想法变得具体的时候带回更多的问题。从最简单的想法开始(例如,在单个viewController中使用scrollView),当你发现必须打破它时,只能把它拿出来!
<强>更新强>
按照您的意见,我认为scrollView可能适合您。我认为使用自定义容器控制器管理一堆视图控制器(如Rob建议的那样)可能会变得过于复杂。您将不得不创建自己的自定义容器控制器,预先存在的容器控制器(如UINavigationController) not 适合您的数据结构(无论如何我都可以收集)。
你不需要管理大量的UIViews,实际上你只需要5 - 1用于scrollView的屏幕部分,一个用于屏幕左右,以及类似的上一个和下面的直接。您可以在刷卡时重复使用这些视图,就像tableViews重用其单元格一样。剩下的工作就是操纵您的数据,以便在屏幕上显示正确的内容。
有关此问题的更多建议,请参阅我对此问题的回答:UICollectionView horizontal continuous loop
答案 1 :(得分:0)
有几点想法:
这会向我发送自定义容器视图控制器(如果是iOS 5及更高版本)。请参阅适用于iOS的View Controller编程指南中的Creating Custom Container View Controllers。
您谈到了使用UISwipeGestureRecognizer
。你也可以一直考虑UIPanGestureRecognizer
。持续做手势很好。考虑阅读一本书,页面滑动跟踪你的手指,但你可以停下来,回去,中间的手势。当然,从现在的滑动手势开始,但如果你的用户体验适用于它,你可以随时考虑连续手势。
你说你正在计划“提前加载视图”。通常,考虑到移动设备的内存容量有限,您需要比这更保守。也许加载当前视图,以及您可能在四个方向中的每个方向上进行的四个视图(以便您可以即时呈现它们),但请保留它。一旦你去了四个可能的目的地之一,然后继续发布那些目前无法到达的目的地,并开始那些目的地。