В одном из моих видов, которые можно перетащить, если пользователь уронит его в неподходящем месте, он просто вернется к исходному кадру, который был записан при нажатии мыши. Это работало нормально в течение нескольких дней без анимации, но я решил ввести анимацию:
-(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?