ドラッグできる私のビューの1つでは、ユーザーが不適切な場所にドロップすると、マウスが下がったときに記録された元のフレームに戻るだけです。これはアニメーションなしで数日間正常に機能していますが、アニメーションを導入することにしました。
-(void)dropToFrameOrigin:(NSPoint)newFrameOrigin animated:(BOOL)animated {
if (animated) {
NSRect newFrameRect = [self frame];
newFrameRect.origin = newFrameOrigin;
NSDictionary *animationInfo = [NSDictionary dictionaryWithObjectsAndKeys:self, NSViewAnimationTargetKey,
[NSValue valueWithRect:[self frame]], NSViewAnimationStartFrameKey,
[NSValue valueWithRect:newFrameRect], NSViewAnimationEndFrameKey,
nil];
NSViewAnimation *animation = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:animationInfo]];
[animation setDuration:0.2];
[animation setAnimationCurve:NSAnimationLinear];
[animation startAnimation];
[animation release];
} else {
[self setFrameOrigin:newFrameOrigin];
}
}
これはNSAnimationLinearとデフォルトのNSAnimationEaseInOutで機能しますが、実際に必要なのは、NSAnimationEaseOutが実行するはずの減速感だけです。何らかの理由で、これを使用すると、ビューは終了するフレームにすぐにスナップし、カーソルがドロップした場所(開始フレーム)にスライドして戻り、終了フレーム(あるべき姿)にスナップバックします。 。
他のすべてのモード(NSAnimationLinear、NSAnimationEaseIn、NSAnimationEaseInOut)は問題なく機能しているようです。NSAnimationEaseOutの目的を誤解していますか?