UIView блок анимации переместить вид слева направо и обратно влево - PullRequest
13 голосов
/ 30 декабря 2011

Я не хочу анимировать вид, который имеет форму стрелки, и я хочу, чтобы он анимировал слева направо, слева направо и т. Д.

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

   [UIView animateWithDuration:.5 delay:0 options:UIViewAnimationOptionRepeat animations:^{
    controller.view.frame = frame1;
    controller.view.frame = frame2;

} completion:^(BOOL finished) {

}];

Ответы [ 2 ]

33 голосов
/ 30 декабря 2011

Вы можете использовать опцию UIViewAnimationOptionAutoreverse, попробуйте код ниже:

UIView * testView = [[UIView alloc] initWithFrame:CGRectMake(20.0f, 100.0f, 300.0f, 200.0f)];
[testView setBackgroundColor:[UIColor blueColor]];
[self.view addSubview:testView];

[UIView animateWithDuration:0.3f
                      delay:0.0f
                    options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
                 animations:^{
                     [testView setFrame:CGRectMake(0.0f, 100.0f, 300.0f, 200.0f)];
                 }
                 completion:nil];

[testView release];

Он будет повторять движение справа налево, слева направо, ... плавно.

0 голосов
/ 30 декабря 2011

Предполагая, что frame1 - начальная позиция, а frame2 - конечная позиция перед повторением.

Проблема в том, что анимация рассчитывается в конце цикла выполнения, поэтому frame1 игнорируется, а представление просто перемещается в frame2. Если вы переместите настройку frame1 за пределы блока, то она должна работать нормально. Если вы хотите, чтобы анимация воспроизводилась и шла вперед, вам нужно сделать ее autoreverse с UIViewAnimationOptionAutoreverse

...