mcornell
mcornell

Reputation: 768

UIView page curl animations isn't working with blocks

I'm trying to convert working UIView animations to using blocks. Aside from the completion callback, I don't see what's different about them. Could someone clarify something I might be missing?

This works as expected

[UIView beginAnimations:@"Curl" context:nil];
[UIView setAnimationDuration:.15];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.storyTextView cache:YES];
self.storyTextView.text = text;
[UIView commitAnimations];

This does change the page's text, but no animation is show, it's just an instant transition.

UIViewAnimationOptions curl = UIViewAnimationOptionTransitionCurlUp;
[UIView animateWithDuration:.15 delay:0 options:(UIViewAnimationOptionCurveEaseInOut | curl) animations:^{
    self.storyTextView.text = text;
} completion:^(BOOL finished) {
    if (finished){
        // pass
    }
}];

Moreover, setting delay in the blocks style animation does nothing to affect the instant transition, it just runs the completion block after the delay.

Upvotes: 3

Views: 660

Answers (1)

emb
emb

Reputation: 405

You'll want to try UIView's transitionWithView instead:

UIViewAnimationOptions curl = UIViewAnimationOptionTransitionCurlUp;
[UIView transitionWithView:self.view duration:0.15 options:(UIViewAnimationOptionCurveEaseInOut | curl) animations:^{
        self.storyTextView.text = text;
} completion:nil];

Upvotes: 7

Related Questions