2013-07-01 5 views
0

Я не мог найти быстрый, лаконичный способ объяснить, что я пытаюсь выполнить (что затрудняло поиск ответа в Google), поэтому я просто попытаюсь подробнее Вот. То, что я пытаюсь выполнить, заключается в перемещении UIImageView на верхний край экрана iPhone, а затем продолжайте его перемещать, но как только изображение проходит верхний край, оно появляется в нижней части экрана, когда оно продолжает двигаться.Сделать обтекание изображения вокруг края экрана? - iPhone Obj-C

Moving Upenter image description hereEnd

Я использую основные [UIView commitAnimations] команды для основного перемещения объектов в моем приложении, поэтому было бы хорошо, если это может быть достигнуто с помощью использования, что (хотя это не должен).

+0

Core Animation не создан для этого материала. Вы можете подделать его двумя видами изображений. – CodaFi

+0

Я сделал это (горизонтальная, но такая же теория), это * не * весело. искать долго и упорно в другие способы обойти это. – Kevin

+0

@CodaFi Знаете ли вы, что * * построено для этого? Я пытаюсь применить это ко многим различным UIImageViews, поэтому я боюсь, что использование двух изображений для каждого будет усложнять вещи. – minichrispy

ответ

0

Я думаю, вы могли бы сделать это с помощью UIScrollView ... вот что я написал на cyclic scroll views некоторое время назад.

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

0

Лучший способ реализовать это - создать подкласс CCNode, который будет содержать первый и второй спрайты, и по необходимости заменит их. Таким образом, вся ваша логика будет очень простой. Вы просто работать с одним CCNode (подкласс) и не будет думать о swaping спрайты - это будет сделано автоматически вашим классом

@interface MyNode : CCNode 
{ 
CCSprite *sprite1; 
CCSprite *sprite2; 
CCSprite *currentSprite; 
bool isChanging; //indicates that now two sprites are visible 
} 
@end 
+0

Никогда не работал со спрайтами раньше, я буду смотреть на него больше и посмотреть, смогу ли я заставить его работать на это – minichrispy

+0

жаль, что я обычно вижу поведение в играх, я ничего не думаю «связанная с игрой» на самом деле нужна в вашем программировании, просто обманывая пользователя, думая, что они видят один объект, но действительно создают свой собственный способ копирования, как сказал большинство пользователей, и я думаю, что когда копия полностью появится на экране, тогда разместите исходное изображение там и удалить объект копирования/зеркалирования – rezand

1

Вам не нужно возиться с видом прокрутки или переключиться на cocos2d для реализации простые анимации. Все, что вам нужно сделать, это создать 2 объекта CALayer, а затем присвоить layer.contents одному изображению.

CALayer *layer1 = [CALayer layer] 
CALayer *layer2 = [CALayer layer] 
UIImage *image = [UIImage imageNamed:@"whatever.png"]; 

layer1.contents = (id) image.CGImage; 
layer2.contents = (id) image.CGImage; 

Затем используйте обычную анимацию для обновления положения двух кадров, как описано this Apple QA doc. Вам просто нужно определить высоту окна, а затем убедиться, что начальные и конечные точки Y из 2 CALayers всегда равны 1 разнице. Итак, когда layer1 оживляет Y = -1, это означает, что layer2 будет в Height-1. Только когда оба слоя будут частично открыты, вы увидите, что и то, и другое, вот как вы получите этот эффект для работы и, кажется, всего лишь 1 слой.

Смежные вопросы