Question: My goal is simple and I have achieved this previously which is why I'm resorting to asking my question here.

I am trying to animate a subview. Simple enough. The view ends up exactly where I want it to be after the animation is over. The only problem is:
whatever I do the animation duration is completely ignored. It happens instantly.

```
- (void)callToDismissView:(UIView *)view {

     [self.view addSubview:view];

     [self dismissViewControllerAnimated:NO completion:nil];

     [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^(void){

         CGRect frame = self.view.frame;
         frame.origin.x = frame.size.width;
         view.frame = frame;

     } completion:^(BOOL finished){

         [view removeFromSuperview];
     }];
 }

```

Now I have tried different frames and durations to see if the view was animated at all and it always ends up where I need it to be. Only instantly...

**EDIT:**

The above code is being called by a delegate in the dismissed view controller like so:

```
- (void)dismissSelf {

    if (self.delegate && [self.delegate respondsToSelector:@selector(callToDismissScan)]) {

        [self.delegate callToDismissScan];
    }
}

```

And that method itself is triggered by a notification.

I must admit that some things are happening during the transition between the two controllers that I don't fully understand. (And I would very much like to understand them...)

Answer: 
You can try 
[self.view layoutIfNeeded];

like this

```
- (void)callToDismissView:(UIView *)view {

 [self.view addSubview:view];

 [self dismissViewControllerAnimated:NO completion:nil];
 [self.view layoutIfNeeded];
 [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^(void){

     CGRect frame = self.view.frame;
     frame.origin.x = frame.size.width;
     view.frame = frame;
     [self.view layoutIfNeeded];

 } completion:^(BOOL finished){

     [view removeFromSuperview];
 }];
 }

```
Maybe you need try like this.

```
- (void)callToDismissView:(UIView *)view {
    [self.view addSubview:view];
    CGRect frame = self.view.frame;
    frame.origin.x = frame.size.width;
    [UIView animateWithDuration:0.3 delay:0.3 
                        options:UIViewAnimationOptionCurveEaseInOut animations:^(void){
                            view.frame = frame;
                        }
                     completion:^(BOOL finished){
                            [view removeFromSuperview];
                            //[self dismissViewControllerAnimated:NO completion:nil];//uncomment if need.
                     }];
}

```