El Capitan破坏了我的NSView动画



我有一个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;

相关内容

  • 没有找到相关文章

最新更新