Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CATransition push without fade

I'm making a navigation controller class for Mac OS X.

I want to replace the current view with a kCATransitionPush animation.
Like in this post:
Core Animation Tutorial - Wizard Dialog With Transitions

The CATransition is set up like this:

CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
[self.view setAnimations:@{ @"subviews" : transition }];

However, when I replace the views, there is a fade animation, which is being automatically added.

[NSAnimationContext beginGrouping];
{
    [[self.view animator] replaceSubview:_currentViewController.view with:newViewController.view];
}
[NSAnimationContext endGrouping];

How can I do a push animation without the fading?

like image 352
IluTov Avatar asked Jan 12 '13 13:01

IluTov


2 Answers

The best way I've found to get smooth Core Animation transitions that works regardless of whether the view supports CA or not is to do the following:

  1. Create an image of the view you are trying to animate, using NSView -cacheDisplayInRect:toBitmapImageRep or a similar method
  2. Put that image in an NSImageView
  3. Layer back the image view, which will draw fine without glitches when layer backed
  4. Add the image view as a subview over the view that you are trying to transition
  5. Animate the image view frame using NSView's animator proxy
  6. Remove the image view once the animation has completed
like image 114
indragie Avatar answered Oct 02 '22 14:10

indragie


I suspect you're running into implicit animations - Core Animation will automatically animate layer property changes that happen outside of your own transactions.

There's a good summary of several methods for disabling these implicit animations in these two questions:

How to disable CALayer implicit animations?

Disabling implicit animations in -[CALayer setNeedsDisplayInRect:]

...and you can read more about implicit transactions in the Core Animation docs

like image 26
lxt Avatar answered Oct 02 '22 15:10

lxt