конвертировать простую анимацию в блочную анимацию - PullRequest
2 голосов
/ 11 декабря 2011

У меня есть анимация, которая слегка отклоняет вид вдоль оси x. Проблема в том, что используется старый механизм анимации, и, как указано в документации, для iOS4 + рекомендуется использовать блочную анимацию. Мне интересно, как я могу превратить эту простую анимацию в анимацию на основе блоков:

[UIView beginAnimations:@"bounce" context:nil];
[UIView setAnimationRepeatCount:2];
[UIView setAnimationRepeatAutoreverses:YES];
self.view.center = CGPointMake(self.view.center.x + 10, self.view.center.y);
[UIView commitAnimations];

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

Спасибо за любую помощь.

Ответы [ 3 ]

5 голосов
/ 11 декабря 2011

Формат блочной анимации выглядит следующим образом:

[UIView animateWithDuration:<#(NSTimeInterval)#>
                      delay:<#(NSTimeInterval)#>
                    options:<#(UIViewAnimationOptions)#>
                 animations:<#^(void)animations#>
                 completion:<#^(BOOL finished)completion#>];

И приведенный ниже код отображает представление twice и go back to origin position, , может быть, существует лучший способ :

[UIView animateWithDuration:0.2f
                      delay:0.0f
                    options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     self.view.center = CGPointMake(self.view.center.x + 10, self.view.center.y);
                 }
                 completion:^(BOOL finished) {
                     self.view.center = CGPointMake(self.view.center.x - 10, self.view.center.y);
                     [UIView animateWithDuration:0.2f
                                           delay:0.0f
                                         options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionCurveEaseInOut
                                      animations:^{
                                          self.view.center = CGPointMake(self.view.center.x + 10, self.view.center.y);
                                      }
                                      completion:^(BOOL finished) {
                                          self.view.center = CGPointMake(self.view.center.x - 10, self.view.center.y);
                                      }];
                 }];

И этот похож, но go back to origin position not smoothly.

[UIView animateWithDuration:0.2f
                      delay:0.0f
                    options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     self.view.center = CGPointMake(self.view.center.x + 10, self.view.center.y);
                     self.view.center = CGPointMake(self.view.center.x - 10, self.view.center.y);
                 }
                 completion:nil];
2 голосов
/ 11 декабря 2011

Попробуйте этот код:

[UIView setAnimationRepeatCount:2];
[UIView animateWithDuration:0.2 
                      delay:0.2 
                    options:(UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat) 
                 animations:^{
                     self.view.center = CGPointMake(self.view.center.x + 10, self.view.center.y);
                 } completion:^(BOOL finished) {
}];

PS Я не пробовал ...

0 голосов
/ 11 декабря 2011
     [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionAutoreverse                 animations:^{
     self.view.center = CGPointMake(self.view.center.x + 10, self.view.center.y);
     } completion:nil];

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

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