2013-01-12 17 views
1

下面是一个视图的屏幕截图,我有权在我的设备上进行操作。使用SwipeGester交换视图(同一实例) - 屏幕截图

Ipad Screenshot

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

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

我想我想弄清楚我的选择。 NavigationController实际上并不是我想要的,因为我不需要导航栏,但在我看来,我有一个视图控制器的数组,每个视图控件的视图属性都指向分配的每个视图,然后作为我滑动我会通过使用视图控制器索引带来适当的视图(通过一些动画代码)

另一种可能的选择将是UIScrollView,但这似乎很繁琐,可能不是我真正想要的。

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

我想我想看看是否有人有任何问题或建议,想出最简单(最模块化)的方法来刷不同的意见。要使用视图控制器数组吗?

+0

看起来好像你在这里有一个数据网格。你有没有想过UICollectionView?一次只显示一个屏幕大小的单元格? – foundry

+0

嗯,我已阅读 - 我的问题的要点是试图找出如何滑动视图(这是一个局部视图)只是按钮不是屏幕的顶部。最好的方法来设置。足够建立一个XIB文件?只需使用UIView子类的数组就可以了...... – geeksweep

+0

开始想到它可能需要使用导航控制器。看起来你可以隐藏导航栏,甚至不使用它。然后创建一个视图控制器堆栈(每个使用其视图属性指向UIView实例),然后使用滑动手势在我选择的视图控制器中进行动画处理。 – geeksweep

回答

0

对于你来说,一个Xib就足够了(对于你的应用程序的这部分来说)。

请勿使用UINavigation控制器。 NavController隐喻是一堆卡片之一。你没有那个数据结构。

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

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

我无法真正帮助您了解更多细节,因为我没有足够的想法来实现您的目标。也许你应该尝试和实现这些方法之一,当你的想法变得具体时,回到这里再回答更多的问题。从最简单的想法开始(例如,在单个viewController中的scrollView),只有当你发现你必须打破它的时候才会把它扔掉!

更新
继您的评论,我确实认为scrollView可能适合你。我认为用一个自定义容器控制器管理一堆视图控制器(就像Rob建议的那样)可能会过于复杂。您将不得不创建自己的自定义容器控制器,预先存在的容器控制器(例如UINavigationController)是而不是适合您的数据结构(无论如何我都可以收集)。

你不需要管理大量的UIViews,实际上你只需要5到1个用于scrollView的屏幕部分,一个用于立即左右的屏幕,并且类似于上下的直接屏幕。滑动时可以重复使用这些视图,这与tableViews重用其单元格的方式很相似。其余的内容将涉及操纵你的数据,以便正确的内容在屏幕上排列在视图中。

见我回答这个问题了一些这方面的更多想法:UICollectionView horizontal continuous loop

+0

感谢您的帮助!我想实现的总体想法是,我将拥有X个UIView子类,每个子类都有一排这些按钮。我想使用SwipeGesture将这些视图中的一个(动画)带到屏幕上,具体取决于用户滑动的方向。 swipegesture部分很简单 - 我只是想找出将这些视图(一系列视图控制器?)存储到哪里的最佳方式,以便在某个位置进行轻扫时,我可以在主屏幕上为相应视图设置动画效果。这是否更有意义? – geeksweep

+0

查看我的更新回答。您可以存储一堆视图,但更好的是可以存储创建视图所需的一堆数据,然后根据需要创建它们(或重新使用它们)。 – foundry

+0

响应你的更新 - 它看起来像UIScrollView可能是要走的路,但我不会有5个UIViews。例如,如果我从右侧的视图中滑动,该视图可能也会有箭头(取决于视图数据),因此我可以向上滑动,向右滑动到另一个视图(这将具有一排按钮(具有不同的数据)当然在左边,我可以回到前面的视图,我还需要能够“跳”到视图上方,下方,左侧或右侧 - 所以我不会总是用滑动来改变以不同的视角 – geeksweep

0

一对夫妇的想法:

  1. 这尖叫声定制的容器视图控制器我(如果iOS 5及以上)。请参阅适用于iOS的View Controller编程指南中的Creating Custom Container View Controllers

  2. 您提到过使用UISwipeGestureRecognizer。您也可以随时考虑UIPanGestureRecognizer。有持续的手势是很好的。考虑阅读一本书,其中页面滑动跟踪你的手指,但你可以停下来,回到中间的手势。当然,现在开始使用滑动手势,但是如果您的用户体验适合它,那么您将来可以始终考虑持续的手势。

  3. 你说你打算“提前预加载视图”。一般来说,考虑到移动设备的内存容量有限,你会希望比这更保守。也许加载当前的视图,以及在四个方向中的每一个方向上可能会出现的四个视图(以便您可以瞬间呈现它们),但将其留在那里。一旦你去了四个可能的目的地之一,然后继续并释放目前无法到达的那些目的地,然后开启那些目的地。

+0

感谢Rob的输入我试图提出希望我想达到(希望更好地凝聚)他是一分钟前我绝对不希望用户能够回到中间手势,为什么我使用SwipeGester?这也只是iPad和横向模式。我想我将不得不使用Instruments来查看当我有一定数量的视图(你推荐4)与我有多少内存消耗与更多,我绝对不想成为记忆猪,我的评论中有任何其他评论他在上面?再次感谢您的回应! – geeksweep

+0

另外我想补充说的是,如果我确实去了一个自定义的容器,将有一个视图控制器的数组仍然是有意义的,这样,当用户滑动我可以导航到我需要的适当的视图控制器,然后动画到屏幕?在你发布的“一个导航控制器管理一堆儿童视图控制器”的链接下的链接似乎与我的想法有一堆视图控制器... – geeksweep

+0

@geeksweep不,我没有任何意见与您的交流他。就像我说的,我只是使用自定义容器。如果UI的性能要求它,我会预先载入我可以刷到的四个控制器。如果它不需要它,我甚至不会那样做。但我绝对不会加载所有控制器的数组。 – Rob