gpt4 book ai didi

cocoa - El Capitan 破坏了我的 NSView 动画

转载 作者:行者123 更新时间:2023-12-03 16:15:21 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com