gpt4 book ai didi

ios - 如何从 UIViewController 中抽象出交互?

转载 作者:行者123 更新时间:2023-12-01 16:19:26 25 4
gpt4 key购买 nike

我需要帮助来理解如何从 UIViewController 中抽象出交互。 .出于所有意图和目的,假设我有一个控制拼图的 View Controller 。我有一系列拼图 View 、拼图板 View (放置拼图的地方)以及其他一些杂项 View 。现在我与这些拼图有典型的泛式交互。

我需要做的是将交互抽象出来,这样我就可以在单击按钮或调用方法时完全改变整个系统的“交互模式”,可以说是整个系统的“交互模式”,同时保持一切状态否则它在切换之前的确切位置。例如,在切换之后,他们不必用手指拖动棋子,而是必须“选择”一个棋子,然后利用陀螺仪的重力滑动它。

我对 iOS 还很陌生,实际上总体上几乎没有 OO 经验,所以在我破坏我的代码来解决这个问题之前,我真的想从更有经验的人那里得到一些建议。 (是的,我会拍个快照,但我还是很紧张!)无论如何,我在想也许我应该做这样的事情:

  • 拥有一个 Root View Controller ,它将保留指向我的 View 的强指针并处理所有与非交互相关的
  • 在该 Root View Controller 中有一个指向交互 Controller 的指针,该 Controller 的工作是处理所有交互代码
  • 交互 Controller 将在运行时通过委托(delegate)从 Root View Controller 通过委托(delegate)获取其 View ,并将任何手势识别器等附加到 viewDidLoad
  • 中的 View 。
  • 交互 Controller 将在运行时关闭。可接受的交互 Controller 对象将来自我为此目的定义的某些 UIInteractionViewController 的子类。

  • 我不知道这是否会

    a) 实际工作

    b) 做最好的方法

    c) 足够快以在运行时真正工作

    d) 可扩展(我可能需要许多不同的“模式”)。

    事实上,我越看我写的东西,我就越开始怀疑它的意义。救命,求救。

    谢谢!

    最佳答案

    好问题。

    在我看来,OO 是应用程序开发的关键点。许多应用程序开发人员根本没有太多的OO经验,这导致在SO上出现很多误解,烦躁,奇怪的问题和答案。
    首先是对Cocoas框架的基本架构以及如何使用它们缺乏了解,因为它们在很多方面都遵循继承和对象组合的思想,并利用了OO模式。这种缺乏会导致与框架的广泛斗争和/或(当学习第一个 OO 类(class)时)关于 OO 概念的完全过度设计。

    对于您的问题:您似乎已经对基本的 OO 原则有了足够的了解,可以了解框架内部发生了什么。现在您应该注意保持简单。你的益智游戏听起来像一个典型的应用程序:你一个人或几个人一起工作,整个代码库会很小,它不是一个库,它的生命周期会很短,一旦完成,你将修复错误并拥有小改进,但不适应完整的新环境等等。所以我认为你不应该对问题中描述的问题大量使用 OO 模式(即使我猜所描述的解决方案会起作用)。

    我会做这样的事情:

  • 让你的 puzzel 的 View Controller 通过
    实现所有需要的东西,比如:
    touchesBegan , touchesMoved , touchesEnded , accelerometer:didAccelerate:
  • 给这个 Controller 一个模式并按下按钮打开它:
    int controlMode; // in PuzzleController.h
  • 在您的事件处理中打开控制模式,如下所示:

  • 例子
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
    switch (controlMode)
    {
    case ControlModeDrag:
    touchedPiece = [self findPiece:event];
    case ControlModeGravity:
    //do nothing;
    case ControlModeSomethingElse:
    // whatever
    default: //...
    }
    }

    -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    {
    switch (controlMode)
    {
    case ControlModeDrag:
    [self moveTouchedPiece:event];
    case ControlModeGravity:
    //do nothing;
    case ControlModeSomethingElse:
    // whatever
    default: //...
    }
    }

    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
    switch (controlMode)
    {
    case ControlModeDrag:
    touchedPiece = nil;
    case ControlModeGravity:
    touchedPiece = [self findPiece:event];
    case ControlModeSomethingElse:
    // whatever
    default: //...
    }
    }

    - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
    {
    switch (controlMode)
    {
    case ControlModeDrag:
    //do nothing
    case ControlModeGravity:
    [self moveTouchedPiece:accelaration];
    case ControlModeSomethingElse:
    // whatever
    default: //...
    }
    }

    关于ios - 如何从 UIViewController 中抽象出交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10409549/

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