Анимация UILabel и UITextField (фреймворк Facebook POP)

Я использую платформу Facebook POP для анимации UILabels а также UITextFields когда пользователь ввел неправильный ввод. Я хочу смоделировать анимацию весны, когда вы вводите неверный пароль на Mac.

Я написал этот метод для создания анимации встряхивания:

- (void)shakeAnimation:(UITextField *)textField :(UILabel *)label
{
  //This method takes a textField and a label as input, and animates them accordingly. 
  //When the animation is done, the button is available for touch again, and the animation is removed.

  POPSpringAnimation *positionAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionX];
  positionAnimation.springBounciness = 20; //just parameters, nothing fancy
  positionAnimation.velocity = @4000;
  [positionAnimation setCompletionBlock:^(POPAnimation *animation, BOOL finished) {
    self.signUpButton.userInteractionEnabled = YES;
  }];
  [textField.layer pop_addAnimation:positionAnimation forKey:@"positionAnimation"];
  [label.layer pop_addAnimation:positionAnimation forKey:@"positionAnimation"];
  [positionAnimation removedOnCompletion];

}

Однако, когда я вызываю этот метод примерно так: [self shakeAnimation:self.emailField :self.emailLabel];

UILabels только переместитесь на 50px вправо и затем прекратите движение, тогда как UITextFields ничего не делай Это совсем не похоже на анимацию, это всего лишь настройка кадра.

1 ответ

Решение

Вместо добавления того же POPSpringAnimation как textField слой и label слой, сделай два POPSpringAnimationи добавить по одному для каждого. Как это:

POPSpringAnimation *anim1 = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionX];
anim1.springBounciness = 20; //just parameters, nothing fancy
anim1.velocity = @400;
[anim1 setCompletionBlock:^(POPAnimation *animation, BOOL finished) {
    self.button.userInteractionEnabled = YES;
}];

POPSpringAnimation *anim2 = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionX];
anim2.springBounciness = 20; //just parameters, nothing fancy
anim2.velocity = @400;

[textField.layer pop_addAnimation:anim1 forKey:@"positionAnimation"];
[label.layer pop_addAnimation:anim2 forKey:@"positionAnimation"];

[anim1 removedOnCompletion];
[anim2 removedOnCompletion];
Другие вопросы по тегам