Animation Blocks resets to original position after updating text

I’m currently testing my apps for the release of IOS 8. I noticed that after I performed an animation block, the animation resets if I update the text of any label. I ran a simple example with one method shown below. Running this example results in the following:

  • Clicking myButton the first time- animation runs but resets when the label text is changed.
  • Clicking myButton the second time – animation runs but does not reset to original position.

It seems like this happens because the label text doesn’t change. If I completely remove the line updating the text, this also stops the animation from resetting at the end.

  • Swift 3 (SpriteKit): Reseting the GameScene after the game ends
  • How to clear live gamecenter leaderboard data?
  • iOS View gets reset on addSubview
  • iOS resetting granting access to reminders
  • Clearing CoreData and all that inside
  • I would like to fix this so that when the method runs, the label text can be updated without resetting the animation.

    - (IBAction)move:(id)sender {
    
    [UIView animateWithDuration:0.4 delay:0.0
                     options:UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                         self.myButton.center = CGPointMake(200, 300);
                     }completion:^(BOOL finished){
    
                         if(finished){
                             self.myLabel.text=@"moved";
                         }
    
                     }];
    }
    

    2 Solutions Collect From Internet About “Animation Blocks resets to original position after updating text”

    This problem can be caused by having Auto Layout set on the UIView. Strictly speaking, if you’re using Auto Layout, then you shouldn’t animate the absolute position of objects — you should animate their constraints instead.

    Changing the label text once your animation is underway triggers a layout refresh, and iOS shuffles everything around to comply with the original view constraints. (I suspect this is a behavioural change from iOS7).

    Quick fix: un-check Auto Layout on the View, and this should work as expected.

    Try this. Put the desired animation in the finish block also.

        - (IBAction)move:(id)sender {
    
        [UIView animateWithDuration:0.4 delay:0.0
                         options:UIViewAnimationOptionBeginFromCurrentState
                         animations:^{
    
    
    self.myButton.center = CGPointMake(200, 300);
                     }completion:^(BOOL finished){
    
    
    
             if(finished){
                             self.myLabel.text=@"moved";
     self.myButton.center = CGPointMake(200, 300);
                         }
    
                     }];
    }