Как сделать частичные представления в Objective C? - PullRequest
0 голосов
/ 15 января 2012

Старое название вопроса: Как захватить события в родительских UIViews, таких как слои HUD?

Я пытаюсь написать игру, используя UI Framework, а не cocos2d.

Я хотел бычтобы сделать View partials правильно обработанным.Это кажется невозможным.

Под частичными представлениями я имею в виду способ, которым Ruby on Rails (и другие языки) позволяет вам иметь небольшие куски уровня представления (код представления), которые появляются в большей частислой представления (вид кода).

В игре есть слой HUD с оценкой сверху (и другими метаданными), и я использую

[self.view addSubview:y] или [self.navigationController push...]

Визуально это будет выглядеть так (не в масштабе):

+----------------------------+
|A                           |
|+--------+   +------------+ |
||B       |   |C           | |
||        |   |            | |
|+--------+   |            | |
|             |            | |
|             +------------+ |
+----------------------------+
  • В разделе A есть кнопки, относящиеся к главному меню (основная навигация)
  • В разделе B есть кнопкиза счет и т. д.
  • Раздел C является основной игровой областью

Как Раздел A, так и Раздел B являются слоями HUD, они должны иметь интерактивные события, где это необходимо.

Я не хочу повторять один и тот же код снова и снова, поэтому я чувствую, что система HUD, в которую я включаю представления, которые я хочу видеть в окне, должна быть лучшим способом для достижения этой цели.

ПроблемаУ меня есть то, что, если я включу мой файл HUD.h / HUD.mВ любом другом контроллере View я больше не могу принимать щелчки для Разделов A или B в Разделе C и не могу заставить его выполнять действия по событию, так как он всегда жалуется, что метод не существует в Разделе C.

Если я нахожусь в представлении Раздела C, я должен принимать щелчки от A и B и обрабатывать их надлежащим образом.

Таким образом, каков наилучший способ захвата событий с помощью многоуровневой системы HUD и соответствующей обработки событий?

Наиболее близким, что я видел, возможно, является использование touchesBegan, но я не совсем понимаю, как связать события touchesBegan с событиями, которые находятся в контроллере Раздела A / B.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 января 2012

Я решил опробовать несколько разных идей для использования cocos2d, так как было бы неплохо добавить в мой набор навыков.

Закрыто.

0 голосов
/ 15 января 2012

Я не уверен на 100%, что это то, о чем вы спрашиваете, но если вы говорите, что хотите, чтобы в разделе B или C происходили нажатия, которые на самом деле не касаются кнопки, чтобы перейти в раздел A, то вот что ты должен делать: Создайте подкласс UIView, называемый, например, HUDItemContainerView. Переопределить UIView -hitTest: withEvent: метод, как это:

- (UIView *)hitTest:(CGPoint)point 
          withEvent:(UIEvent *)event
{
    UIView* touchedView = [super hitTest:point withEvent:event];

    if (touchedView == self)
        return nil;

    return touchedView;
}

Это добавляет следующее поведение к HUDItemContainerView: «Если прикосновение во мне касается одного из моих подпредставлений, используйте это прикосновение. Если оно касается меня напрямую (т.е. не одного из моих подпредставлений), тогда игнорируйте касание и дайте ему пройти через все виды, которые находятся позади меня (например, раздел A). "

Затем используйте HUDItemContainerView для базовых представлений секции B и секции C.

...