Кажется, вы можете сделать это более сложным, чем нужно.Анимируйте вид центр , а не кадр .
[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 приведет к тому, что анимация вернется назад к тому месту, где она началась, а затем счетчик повторений вызовет ее повторение навсегда.
Кроме того, нет причин для перемещениявид вниз на один пиксель за раз.Просто установите конечную позицию, которую вы хотите, чтобы вид имел, и укажите соответствующую продолжительность, которая должна занять, чтобы добраться туда.Базовая анимация избавляет вас от необходимости создавать собственные анимационные циклы, таймеры или потоки.