Перемещение фонового изображения приложения iPhone - PullRequest
0 голосов
/ 18 апреля 2010

Я создаю свое первое нативное приложение для iPhone (начинающий Objective-C). На главном экране главного меню я бы хотел, чтобы фоновое изображение медленно перемещалось влево. Можно ли выложить фоновое изображение и заставить его двигаться? Я в основном пытаюсь, чтобы мои облака плыли по фону. Как бы вы достигли этого?

Ответы [ 3 ]

2 голосов
/ 20 апреля 2010

Я бы добавил UIImageView на ваш экран (размещенный под всем остальным на экране). Поместите изображение облаков в UIImageView и анимируйте значение кадра, чтобы переместить его по экрану.

Примерно так (этот код не проверен) оживил бы вид изображения, чтобы переместиться влево по экрану:

cloudsImage.frame = CGRectMake(0,0,320,100);   // depends on your image

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3.0f];  // duration affects how fast it moves 

cloudsImage.frame = CGRectMake(-320,0,320,100);  // moves left off the screen

[UIView commitAnimations];

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

cloudsImage1.frame = CGRectMake(0,0,320,100);   // depends on your image
cloudsImage2.frame = CGRectMake(320,0,320,100); // start off the right edge

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3.0f];  // duration affects how fast it moves 

cloudsImage1.frame = CGRectMake(-320,0,320,100);  // moves left off the screen
cloudsImage2.frame = CGRectMake(0,0,320,100);     // moves left onto the screen

[UIView commitAnimations];
0 голосов
/ 06 июля 2010

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

Предполагается, что оба изображения имеют одинаковый размер с экраном.

Одно изображение начинается полностью на экране, одно изображение начинается слева от экрана, его правая сторона совпадает с левой границей экрана (то есть, оно полностью за кадром слева). Давайте назовем экранное изображение «A», а внеэкранное изображение «B».

function1 () Первый блок сдвигает ширину экрана обоих изображений вправо По завершении он устанавливает изображение, только что перемещенное за пределы экрана ('A'), в левую часть экрана, а затем вызывает function2 ().

function2 () Второй блок сдвигает ширину экрана обоих изображений вправо По завершении он устанавливает изображение, только что сдвинутое с экрана ('B'), влево к экрану, а затем вызывает function1 ().

Вот первая функция:

-(void)animate_1
{
[UIView animateWithDuration:roadTimerPeriod delay:0.0 
   options:UIViewAnimationOptionCurveLinear|UIViewAnimationOptionAllowUserInteraction 
   animations: ^{
   // frame 1 moves off bottom
 imageAnimatedRoad1.transform = CGAffineTransformTranslate(imageAnimatedRoad1.transform,0,480);
 // frame 2 moves onto top
 imageAnimatedRoad2.transform = CGAffineTransformTranslate(imageAnimatedRoad1.transform,0,480);     
            } 
 completion:^(BOOL finished)
           {
           // reset frame 1 ready to move on
           imageAnimatedRoad1.frame = CGRectMake(0,-480,320,480);
           [self animate_2];
           } ];   
}

Как вы думаете, это хорошее решение, или я пропустил нечто явно очевидное?

0 голосов
/ 19 апреля 2010

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

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