UIView на основе анимации - PullRequest
       43

UIView на основе анимации

1 голос
/ 09 февраля 2009

Я пытаюсь анимировать некоторые UIImageViews для 2D-игры. Использование [UiView begin / commit animation] исключено, так как мне нужно всегда определять позиции всех видов изображений. Вместо этого я изменяю frame.origin.x / y в моих UIImageViews, чтобы вручную управлять моей анимацией. Моя проблема заключается в том, что частота кадров значительно падает для большого количества UIImageViews или если их размер слишком велик (кстати, UIImageViews содержат PNG с прозрачными цветами). У вас есть советы по оптимизации?

Спасибо

Ответы [ 3 ]

6 голосов
/ 09 февраля 2009

UIImageView отлично подходит для анимации отображения (UIViews - это легкие обёртки вокруг CALayers, которые являются просто текстурами, хранящимися на видеокарте), но вам нужно использовать блок анимации begin / commit для получения плавной анимации. Используя это, вы можете получить текущую позицию представления, получив доступ к базовому слою UIView и получив его уровень представления. У Дастина Бахраха есть пост , в котором описывается, как это сделать. По сути, уровень представления - это самое близкое приближение Core Animation к тому месту, где фактически находится слой в любой момент времени, поэтому его кадр - это кадр вашего UIView в этот момент.

Я не уверен, что сенсорные события найдут свой путь к представлению при его перемещении по экрану, поэтому, если вам нужно, чтобы UIImageView реагировал на прикосновения, вам может понадобиться заменить его на CALayer, вставьте его как подслой вашего основного слоя UIView и вызовите метод hitTest для presentationLayer этого основного слоя. Это должно вернуть presentationLayer вашего движущегося слоя, если на него щелкнули, или фоновый слой, если нет.

Честно говоря, я бы не стал использовать OpenGL, если бы вам не пришлось этого делать из соображений производительности, потому что код намного сложнее, чем то, что Core Animation предоставляет вам UIViews и CALayers. Мне удалось анимировать 50 движущихся полупрозрачных слоев со скоростью 60 кадров в секунду (100 при 30 кадрах в секунду), используя только UIViews и CALayers.

1 голос
/ 09 февраля 2009

Для 2D-игры я бы выбрал Cocos2D-iphone .

Это очень похоже на Flash, его преимущество заключается в том, что он имеет открытый исходный код и тесно интегрирован с физикой Бурундука. Кроме того, находится в стадии разработки и превосходного развития RIK.

Вы можете сделать с Cocos гораздо больше, чем просто игры. Определенно стоит проверить.

0 голосов
/ 11 февраля 2009

ОК, использование анимации начала / фиксации решило мою проблему с частотой кадров, и я смог определить координаты UIView в реальном времени. Остается последний вопрос: могу ли я программно остановить такую ​​анимацию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...