使用animateWithDuration

时间:2017-08-22 11:04:17

标签: ios objective-c

我的动画遇到了一些问题。预期的结果是UIButton都应该移动到他们的位置,一旦他们到达他们的位置,他们必须巧妙地向上和向下摆动,以模拟到达他们的蹦极和弦的末端,如果你将。我实现的结果是除振荡之外的每个动画都完美地执行。为什么是这样? (我所指的振动动画当然是spring animateWithDuration方法。

- (void)viewDidLoad 
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    _orText.alpha = 0;

    //Email login button properties
    _emailLoginForwardButton.layer.cornerRadius = _emailLoginForwardButton.frame.size.width / 2;
    self.emailLoginForwardButton.layer.borderWidth = 1.5f;
    self.emailLoginForwardButton.layer.borderColor = [UIColor whiteColor].CGColor;
    [self.emailLoginForwardButton setImageEdgeInsets:UIEdgeInsetsMake(7, 7, 7, 7)];
    _emailLoginForwardButton.frame = CGRectMake(77, 700, 40, 40);
    [UIView animateWithDuration:0.5
                     animations:^
     {
         _emailLoginForwardButton.frame = CGRectMake(77, 470, 40, 40);
     }
                 completion:^(BOOL finished)
 {
     [UIView animateWithDuration:0.3
                           delay:0.6
          usingSpringWithDamping:0.2
           initialSpringVelocity:0.4
                         options:0
                      animations:^(void){}
                      completion:^(BOOL finished)
      {
          _orText.text = @"or";

          [UIView animateWithDuration:0.4
                           animations:^
                           {
                               [_orText setAlpha:1];
                           }
          ];
      }
      ];
 }
 ];

//Google login button properties
_googleLoginForwardButton.layer.cornerRadius =_googleLoginForwardButton.frame.size.width / 2;
self.googleLoginForwardButton.layer.borderWidth = 1.5f;
self.googleLoginForwardButton.layer.borderColor = [UIColor grayColor].CGColor;
_googleLoginForwardButton.frame = CGRectMake(257, 700, 40, 40);
[UIView animateWithDuration:0.5
                      delay:0.4
                    options:0
                 animations:^
 {
     _googleLoginForwardButton.frame = CGRectMake(257, 470, 40, 40);
 }
                 completion:^(BOOL finished)
 {
     [UIView animateWithDuration:0.3
                           delay:0.3
          usingSpringWithDamping:0.2
           initialSpringVelocity:0.4
                         options:0
                      animations:^
      {
      }
                      completion:^(BOOL finished)
      {
      }
      ];
 }
 ];
}

2 个答案:

答案 0 :(得分:0)

- (void)viewDidLoad {
    [super viewDidLoad];
    self.googleLoginForwardButtonBottomConstraints.constant = -100.0;//e.g
    self.emailLoginForwardButtonBottomConstraints.constant = -100.0;//e.g

    [UIView animateWithDuration:0.6
                          delay:0.6
         usingSpringWithDamping:0.2
          initialSpringVelocity:0.4
                        options:0
                     animations:^(void){
                         self.googleLoginForwardButtonBottomConstraints.constant = 40.0;//e.g
                         self.emailLoginForwardButtonBottomConstraints.constant = 40.0;//e.g
                         [self.view layoutIfNeeded];
                     }
                     completion:^(BOOL finished) {

                     }];
}

我已运行此代码并正常运行。希望它会对你有所帮助。

答案 1 :(得分:0)

[UIView animateWithDuration:1
                      delay:0.6
     usingSpringWithDamping:0.42
      initialSpringVelocity:0.1
                    options:0
                 animations:^(void)
                 {
                     _orText.text = @"or";

                     [UIView animateWithDuration:0.7
                                      animations:^
                      {
                          [_orText setAlpha:1];
                      }];

                     [UIView animateWithDuration:0.6
                                      animations:^
                      {
                          _emailLoginForwardButton.frame = CGRectMake(77, 470, 40, 40);
                      }];

                     [UIView animateWithDuration:0.6
                                      animations:^
                                      {
                                          _googleLoginForwardButton.frame = CGRectMake(257, 470, 40, 40);
                                      }
                     ];

                     [self.view layoutIfNeeded];
                 }
                 completion:^(BOOL finished) {

                 }];

这是我的解决方案,但是我想用这个代码做更多的事情。我想让两个按钮以不同的间隔移动,并且出于某种原因,if语句在这里不起作用。另外,我只想在发生另一个动作时初始化,这仍然可以做,但我更愿意让它们在不同的时间移动。