我正在使用无边框的 NSWindow 来创建一个滑出菜单,就像您在许多 IOS 应用程序中可能会发现的那样。我目前使用 setFrame:display:animate: 和两个预定义的矩形来创建滑动效果,并且我还有一个淡化主窗口背景的动画,当前在窗口完成动画后运行。
我非常想同时运行这两个动画。但是, setFrame:display:animate 似乎会阻止所有其他代码,直到它完成。
有没有办法覆盖 setFrame:display:animate 的这个特性?或者任何人都可以推荐一个解决方法?
我有运行 [[self animator]setFrame:display:] 的工作方法,但我更喜欢使用 setFrame:display:animate,因为它在我当前的代码中很重要,并且易于配置持续时间。
一些代码:
//Currently used to animate the window
-(void)showPopWindow{
[self selectAnimationTimeFor:NCpOpen];
[self setFrame:_initialRect display:YES];
[self makeKeyAndOrderFront:NSApp];
[self setFrame:_finalRect display:YES animate:YES];
}
这是我拥有的另一个动画,它当前在 setFrame 完成后运行(注意它在 NSView 的层上运行)。
//...
[layer setBackgroundColor:CGColorCreateGenericRGB(0, 0, 0, 0.5)];
CABasicAnimation *fadeInBackground = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeBackground.duration = [self openAnimationResizeTime];
fadeBackground.fromValue = [NSNumber numberWithFloat:0.0f];
fadeBackground.toValue = [NSNumber numberWithFloat:1.0f];
[layer addAnimation:fadeInBackground forKey:@"opacity"];