我有一个 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;
关于cocoa - El Capitan 破坏了我的 NSView 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32706699/