【问题标题】:Best practice for displaying multiple views in iOS在 iOS 中显示多个视图的最佳实践
【发布时间】:2012-01-16 13:01:13
【问题描述】:

我正在尝试构建一个具有大约 3-5 个完全不同的页面/屏幕的教育应用。每个屏幕包含一个谜题,每个谜题都独立于所有其他谜题(屏幕)。一旦当前屏幕上的谜题得到解决,我想转换到一个新的(随机选择的)屏幕。但是,如果它在需要重置之前已经显示,我会允许多次显示相同的谜题。

我尝试过使用 segues 执行此操作,但这似乎需要 UINavigationController,这不是我想要呈现的体验(因为它需要预定义的屏幕层次结构)。

我认为最好的方法是将每个屏幕作为完全独立的 UIViewControllers,对吗?我只是不确定如何协调它们之间的导航/渲染。

如果您知道任何最佳做法,我将不胜感激。谢谢!

【问题讨论】:

    标签: iphone objective-c ios ipad ios5


    【解决方案1】:

    这是一个可能的选择:

    首先,如果您想要这些谜题之外的菜单,请将其作为 UINavigationController 中的根视图控制器。

    然后创建一个启动器控制器,并在适当的时候将其添加到导航控制器。这将是一个常规的UIViewController,除了在这个控制器中,viewWillAppear 方法让它选择一个随机数 0-5 并通过一个开关运行它,并根据数字推送你的 5 个视图控制器之一。然后当拼图完成时,在导航控制器上调用popViewController。现在当它弹回来时,viewWillAppear 将被再次调用并随机推送另一个。然后,如果您想随时返回主菜单,只需致电popToRootViewControllerAnimated。这应该做你需要的。为了使它不会动画两次,要么只有推送动画,要么只有弹出动画。

    【讨论】:

    • 有趣,这对我来说似乎是迄今为止最直观的解决方案。我会试一试,让你知道我的结果。
    • 我已经尝试过这个解决方案,我真的很接近但我错过了一些东西。在“成功”声音播放完毕之前,我不想切换到下一个视图。所以我将 popViewController 调用放在我的 AudioServicesSystemSoundCompletionProc 中。然而,在我完成第二个谜题后,我得到一个 EXC_BAD_ACCESS 错误。我看到这是导致问题的行:[((__bridge ColorsAppViewController *) clientData).navigationController popViewControllerAnimated:false]; 我假设 EXC_BAD_ACCESS 意味着我的视图控制器已被取消引用我只是不明白为什么会这样。
    【解决方案2】:

    您可以拥有一个控制器,而不是拥有不同的视图控制器。完成第一个后,您可以重新加载拼图的视图。您为第一个谜题应用的逻辑与其他谜题有些相似。所以现在只有你需要处理拼图的不同状态。 例如:我第一次看到拼图 3x3 矩阵,下一个是 4x4 矩阵,下一个是 5x5 矩阵。所以这个状态需要通过视图控制器中的代码来处理。

    【讨论】:

    • 关于这个的几个(新手)问题。 1) 如果我在一个控制器中定义了多个视图,我还能在 XCode 的 Storyboard 视图中查看每个视图吗? 2)我看到的所有示例代码都显示了视图和控制器上的 UI 元素之间的紧密耦合,对于您的解决方案,听起来我需要将该逻辑移至我需要创建的自定义 UIView 类, 正确的? 3) 如何以编程方式强制重新渲染视图(这也会重置所有 UI 元素)?
    【解决方案3】:

    我知道使用 cocos2d 是构建游戏的好方法,它允许不同的“场景”,其中事物彼此独立或可以根据您的选择进行交流。 cocos2d 还有一个“导演”,可以处理所有场景并可以为您推送场景。如果您好奇,请查看:www.cocos2d-iphone.org

    我希望这会有所帮助:)

    【讨论】:

      【解决方案4】:

      好吧,我昨天构建了测试的应用程序来演奏不同的乐器。我使用UIView 来处理我的 3 个仪器的视图。逻辑很简单。我将导航放在UIButton 上,并为每个乐器添加一个subview。当用户点击按钮时,选中的视图将被添加到前面,最后一个视图将被释放或临时在后台。

      希望对你有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 2013-08-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多