Nano Hash - криптовалюты, майнинг, программирование

Лучшая практика для отображения нескольких представлений в iOS

Я пытаюсь создать образовательное приложение, в котором будет примерно 3-5 совершенно разных страниц/экранов. Каждый экран содержит одну головоломку, и каждая головоломка не зависит от всех остальных головоломок (экранов). Как только головоломка на текущем экране будет решена, я хочу перейти на новый (случайно выбранный) экран. Однако я бы разрешил показывать одну и ту же головоломку несколько раз, если бы она отображалась до того, как ее нужно было бы сбросить.

Я пытался сделать это с помощью переходов, но, похоже, для этого требуется UINavigationController, который не является тем опытом, который я хочу представить (поскольку он требует предопределенной иерархии экранов).

Я предполагаю, что лучший способ сделать это — сделать каждый экран полностью отдельным UIViewController, верно? Я просто не уверен, как организовать навигацию/рендеринг между ними.

Я был бы признателен за любые лучшие практики, о которых вы знаете. Спасибо!


Ответы:


1

Ну вот возможный вариант:

Прежде всего, если вам нужно меню вне этих головоломок, используйте его в качестве корневого контроллера представления в файле UINavigationController.

Затем создайте контроллер запуска и добавьте его в контроллер навигации, когда это необходимо. Это будет обычный UIViewController, за исключением того, что в этом контроллере в методе viewWillAppear он выбирает случайное число 0-5 и запускает его через переключатель, и в зависимости от числа нажимает один из ваших 5 контроллеров представления. Затем, когда головоломка будет завершена, вызовите popViewController на навигационном контроллере. Теперь, когда он вернется, viewWillAppear будет вызван снова и случайным образом нажмет другой. Затем, если вы хотите вернуться в главное меню в любое время, просто позвоните popToRootViewControllerAnimated. Это должно делать то, что вам нужно. И сделать так, чтобы он не анимировался дважды, либо анимировать только толчок, либо только поп.

09.12.2011
  • Интересно, это кажется мне самым интуитивным решением на данный момент. Я попробую это и сообщу вам о своих результатах. 09.12.2011
  • Я пробовал это решение, и я очень близок, но мне что-то не хватает. Я не хочу переходить к следующему представлению, пока не завершится воспроизведение звука успеха. Поэтому я поместил вызов popViewController в свой AudioServicesSystemSoundCompletionProc. Однако после завершения второй головоломки я получаю ошибку EXC_BAD_ACCESS. Я вижу, что эта строка вызывает проблему: [((__bridge ColorsAppViewController *) clientData).navigationController popViewControllerAnimated:false]; Я предполагаю, что EXC_BAD_ACCESS означает, что мой контроллер представления был разыменован. Я просто не понимаю, почему это так. 13.12.2011

  • 2

    Вместо того, чтобы иметь разные контроллеры представления, вы можете иметь один контроллер. Вы можете перезагрузить вид головоломки после завершения первого. Логика, которую вы применили для первой головоломки, будет чем-то похожа на остальные. Итак, теперь вам нужно обрабатывать только разные состояния головоломки. Например: у меня есть первое представление с матрицей головоломки 3x3, следующее будет матрицей 4x4, а следующее будет матрицей 5x5. Таким образом, это состояние необходимо обрабатывать с помощью кода в контроллере представления.

    09.12.2011
  • Пара (новичка) вопросов по этому поводу. 1) если у меня есть несколько представлений, определенных в одном контроллере, могу ли я по-прежнему просматривать каждое из них в представлении раскадровки XCode? 2) Весь пример кода, который я видел, показывает тесную связь между элементами пользовательского интерфейса в представлении и контроллером, для вашего решения это звучит так, как будто мне нужно переместить эту логику в собственный класс UIView, который мне нужно создать , правильный? 3) Как программно заставить представление повторно отображаться (что также сбрасывает все элементы пользовательского интерфейса)? 09.12.2011

  • 3

    Я знаю, что использование cocos2d — отличный способ создания игр, и он позволяет использовать разные «сцены», где вещи независимы друг от друга или могут общаться, если вы выберете. Также в cocos2d есть «режиссер», который обрабатывает все сцены и может добавлять сцены для вас. Если вам интересно, посетите: www.cocos2d-iphone.org

    Надеюсь, это поможет :)

    09.12.2011

    4

    Что ж, вчера я протестировал приложение для игры на разных музыкальных инструментах. Я использую UIView для обработки представления для 3 моих инструментов. Логика проста. Я поставил навигацию на UIButton и добавил subview для каждого инструмента. Когда пользователь коснется кнопки, выбранный вид будет добавлен на передний план, а последний вид будет освобожден или временно размещен на заднем плане.

    Надеюсь, это поможет вам.

    09.12.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..