多くの IOS アプリで見られるようなスライド アウト メニューを作成するために、ボーダーレス NSWindow を使用しています。現在、setFrame:display:animate: を 2 つの定義済み四角形と共に使用してスライド効果を作成しています。また、メインウィンドウの背景をフェードさせるアニメーションもあり、ウィンドウのアニメーションが終了した後に現在実行されています。
両方のアニメーションを同時に実行したいと考えています。ただし、 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];
}
これは私が持っているもう 1 つのアニメーションで、現在 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"];