2

在我的一个可以拖动的视图中,如果用户将它放在不合适的位置,它会简单地回到鼠标按下时记录的原始帧。这几天没有动画效果很好,但我决定引入动画:

-(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 的目的?

4

1 回答 1

0

出于某种原因,您必须翻转开始和结束帧才能使 NSAnimationEastOut 工作。另外,您需要设置动画代理,以便在动画结束时收到通知,然后您必须手动将视图的帧设置为原始结束帧。

于 2011-03-12T04:29:41.837 回答