我有一个Mac应用程序,它使用NSAnimationContext
动画分组来动画一个NSView
在屏幕外和另一个NSView
在屏幕上。在开始动画分组之前,我将屏幕外的NSView
定位在我希望它在屏幕上动画时起源于的位置。
在Yosemite和更早的版本中,这工作得很好,但在El Capitan中,好像NSView
从未被放置在我指定的起始位置,所以它在屏幕上从错误的方向动画。
//Position offscreen view at correct starting point.
offscreenView.frame = STARTING_OFFSCREEN_RECT;
//Create animation grouping
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:animationDuration];
[[NSAnimationContext currentContext] setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[[NSAnimationContext currentContext] setCompletionHandler:^{
/*
Do cleanup stuff here
*/
}];
//Move the views
onscreenView.frame = ENDING_OFFSCREEN_RECT:
offscreenView.frame = ENDING_ONSCREEN_RECT;
//End Grouping
[NSAnimationContext endGrouping];
我已经尽我所能调试了这个,在我看来,offscreenView
的帧在一开始的设置实际上并没有发生。
有人知道我做错了什么吗?
我有非常类似的问题- offscreenView
有时从错误的位置开始。offscreenView.layer
似乎乱了。
我通过在我的清理代码中添加以下代码来修复它:
onscreenView.layer = nil;
,以便下次offscreenView
动画时,它将以干净的图层开始。
或者在你的情况下,在开始动画之前重置图层:
offscreenView.layer = nil;
//Position offscreen view at correct starting point.
offscreenView.frame = STARTING_OFFSCREEN_RECT;
//Create animation grouping
...
注意:
在我的动画中,我每次添加offscreenView
到superView:
//Position offscreen view at correct starting point.
offscreenView.frame = STARTING_OFFSCREEN_RECT;
[superView addSubview:offscreenView];
//Create animation grouping
...
在清理代码中,我也删除了onscreenView
:
[onscreenView removeFromSuperview];
onscreenView.layer = nil;