我有一个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
框架在开始时的设置实际上并未发生。
有人知道我做错了吗?
答案 0 :(得分:1)
我遇到了类似的问题 - 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;