【发布时间】:2015-09-22 00:50:14
【问题描述】:
我有一个 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 的框架在一开始的设置实际上并没有发生。
有人知道我做错了什么吗?
【问题讨论】:
-
我遇到了同样的情况,但是在动画 NSLayoutConstraint 的常量时。我的临时解决方法是为 alpha 而不是框架设置动画,这样视图就不会突然出现,但我对此并不满意。
标签: cocoa core-animation nsview osx-elcapitan nsanimationcontext