2009-09-16 2 views
2

Я разрабатываю игру. Я использую около 150 UIImageView для хранения графики. Я имитирую 3D-среду, поэтому я хотел бы изменить z-порядок (как близко объект к камере).Изменить z-порядок подзаголовков на iPhone

Я знаю, существует: [суперзамена заменаSubviewAtIndex: i withSubviewAtIndex: j];

Но по какой-то причине он не работает, некоторые из подпунктов исчезают снова.

Теперь я просто удаляю все подзаголовки и добавляю их снова в правильном порядке z, это нормально с 50 subviews (на 2G iphone), но с 120 требуется полсекунды, так что игровой процесс отстой (у меня нет и 3GS, поэтому я не пробовал там).

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

ответ

5

Документация iPhone часто предупреждает о множественном введении UIViews, так как она имеет большое количество ударов по производительности после определенного момента. Если вы начинаете входить в проблемы, один из вариантов заключается в том, чтобы отобразить ваши UIViews в изображение и использовать это, чтобы уменьшить количество экранных представлений, но если вы имитируете 3D, что, вероятно, не поможет, поскольку ваш составной вид требуется повторная передача слишком часто.

iPhone имеет полную поддержку OpenGL ES, который позволяет использовать реальную 3D-среду. Взгляните на некоторые образцы и/или хорошую книгу по этой теме, и вы обнаружите, что гораздо проще просто использовать OpenGL.

2

Если вы не хотите погрузиться в OpenGL ES, как предлагает Тимоти, вам может потребоваться заменить UIViews на CALayers и разместить их в пределах CATransformLayer. CATransformLayer является новым в iPhone OS 3.0, и он позволяет вам выполнять 3-мерную планировку CALayers. Затем вы можете установить свойство zPosition на свои CALayers, чтобы найти их в плоскости Z CATransformLayer. Подробнее о 3-D макете CALayers, я направляю вас на this article.

Вы можете добавить приятный эффект перспективы на общий CATransformLayer на setting the m34 element в CATransform3D, примененный к этому слою.

Переход от UIViews к CALayers довольно прост, потому что их структуры имеют много общего.

1

Рассмотрите возможность использования 2D-игровой библиотеки, такой как . Я уверен, что поддерживает Z-ordering, и производительность будет намного лучше, чем использование UIViews.

4

Z-order - это артефакт, в котором ваш вид отображается в списке подсмотров вашего супервизора. Последнее подвью, добавленное в супервизор, «сверху».

Итак, чтобы переместить представление в положение «сверху», вы удалите его из своего супервизора, затем снова добавьте его, сделав его последним и, следовательно, сверху.

Здесь вид перемещается в верхнюю часть z-порядка.

Обратите внимание на [self сохранить], чтобы предотвратить ваш dealloc, если ваш список наблюдения является единственной ссылкой на вас.