перемещение изображения на экране - PullRequest
1 голос
/ 17 июля 2010

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

Допустим, изображение начинает двигаться слева, затем, когда оно достигает, достигает права, оно должно начать двигаться назад влево, затем это должно повториться.

У меня есть этот код, который позволяет представлению двигаться вниз, но я не могу перемещать его назад и вперед. Это для UIView.

[UIView beginAnimations:@"MyAnimation" context:nil];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:45.0]; // 5 seconds
frame = movingView.frame;
//int j = frame.origin.y;
int i;
for (i= 0; i<=100; i++) {
    frame.origin.y += i;//100.0; // Move view down 100 pixels
    movingView.frame = frame;
}   

Как мне это сделать?

Привет

Ответы [ 2 ]

3 голосов
/ 24 июля 2010

Кажется, вы можете сделать это более сложным, чем нужно.Анимируйте вид центр , а не кадр .

  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationRepeatAutoreverses:YES];
  [UIView setAnimationRepeatCount:HUGE_VAL];
  [UIView setAnimationDuration:5.0];
  // Animate to right side of the containing view
  [movingView setCenter:CGPointMake([[self view] bounds].size.width - 
                     [movingView bounds].size.width / 2.0, 
                     [movingView center].y)];
  [UIView commitAnimations];

. Это позволит анимировать центр вида справа от содержащего его вида и затем автоматически вернуться кНачальная позиция.Обратите внимание, что я вычитаю половину ширины movingView , так как мы хотим анимировать вправо, но мы перемещаем центр представления, а не его origin .

Установка автоматического обратного повтора на YES приведет к тому, что анимация вернется назад к тому месту, где она началась, а затем счетчик повторений вызовет ее повторение навсегда.

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

1 голос
/ 17 июля 2010

Вам не нужно самим анимировать вещи при использовании анимации UIView.

frame = movingView.frame;
frame.origin.x = 0;
movingView.frame = frame; // starting point

[UIView beginAnimations:@"MyAnimation" context:nil];
[UIView setAnimationDuration:5];

frame.origin.x = 320-25;
movingView.frame = frame; // endpoint

[UIView commitAnimations];

для перемещения слева направо.Чтобы дождаться конца, используйте setAnimationDidStopSelector для вызова метода, который выполняет противоположную анимацию.

Посмотрите на непрерывное переключение uiview для материала делегата анимации.

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