可可 – El Capitan打破了我的NSView动画

我有一个Mac应用程序,它使用NSAnimationContext动画分组来动画一个NSView屏幕外和另一个NSView屏幕.在开始动画分组之前,我将屏幕外的NSView放置在我希望它在屏幕上动画时所从的位置.

在优胜美地和早期版本下,这种方式非常有效,但在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];

我已尽最大努力调试了这一点,在我看来,offscreen的框架在开始时的设置实际上并没有发生.

有人知道我做错了什么吗?

最佳答案 我有类似的问题 – 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
...

注意:

在我的动画中,我每次都会向superView添加offscreenView:

//Position offscreen view at correct starting point.
offscreenView.frame = STARTING_OFFSCREEN_RECT;

[superView addSubview:offscreenView];

//Create animation grouping
...

在清理代码中我也删除了onscreenView:

[onscreenView removeFromSuperview];
onscreenView.layer = nil;
点赞