아이폰어플개발정보2010. 10. 22. 23:03
[아이폰 앱 개발] CATransition showing a single frame from the end of the transition before the animation starts

  CATransition showing a single frame from the end of the transition before the animation starts
 

I am using some code which was originally taken from the Apple sample ViewTransitions to swap two views with each other.

CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setType:kCATransitionFade];
[animation setDuration:0.3f];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[[container layer] addAnimation:animation forKey:@"swap"];

When my transition executes on the devlice, I sometimes get a single frame flash of the final frame of the transition animation and then the animation plays smoothly. This gives a very jarring effect of the 2nd view which flickers in and then out again before the smooth animation executes.

The main difference between my example and the Apple example is that my views are not full screen, I have a container UIView which contains both sub-views and I am applying my animation to the container layer instead the root view layer. I can not see that this should make much difference though.

This issue does not happen at all in the simulator and is intermittent (about 60-70% of the time) on the device. Is anyone else seeing this behaviour and if so, how did you work around it?

Updated with more information: The code was originally part of a multi part animation but I moved it to be triggered by a button to isolate the problem. The issue occurs in both situations.

The animation delegates were implemented but have been removed to try and isolate the problem.

The views are not changing during the animation and in fact [container setUserInteractionEnabled:NO] is being called (but the problem also happens without user interaction being disabled).

I have tried starting the animation from the middle of the transition and ending before the end usingsetStartProgress and setEndProgress, again the problem persists.

I have tried slowing the animation duration right down as well with no effect.

    262508        Dave Verwer        iphone  cocoa-touch  core-animation  objective-c  


 

I can't post comment, but the same as teabot : I did what you said and it doesn't do the trick... Do you have more explanations on the subject ?

    1410428        Unfalkster        iphone  cocoa-touch  core-animation  objective-c  


 

Solved, I had missed a key piece of this that I thought was irrelevant ;) After setting up the animation in the code sample above, I was swapping the views out in the same method.

Moving it to the animationDidStart delegate fixed the issue.

    268456        Dave Verwer        iphone  cocoa-touch  core-animation  objective-c  


  Can you give some example code of this in action please? I have implemented what I understand by your description but my 'glitch frame' persists. #1226703    teabot


 

To begin to answer your question more information is needed - for instance, how are you calling that code (e.g. is it bound to a button as an action or is it triggered automatically somehow), have you implemented the delegate methods to start and stop the animation (and what is contained within them), and are your views changing at some point during the animation? Timing between the simulator and device will be off - you should not rely on the simulator to test animation as everything will happen quicker.

Posted by 오늘마감

댓글을 달아 주세요