2011-01-02 12 views
2

ドラッグできる私のビューの1つで、不適切な場所にドロップすると、マウスがダウンしたときに記録された元のフレームに戻ります。これは、無アニメーションで数日間正常に動作してきたが、私はアニメーションを紹介することにしました:NSAnimationEaseOut NSAnimationEaseOutで奇妙な動作を使用する

-(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の目的を誤解していますか?

答えて

0

NSAnimationEastOutを動作させるには、何らかの理由で開始フレームと終了フレームを反転する必要があります。さらに、アニメーションのデリゲートを設定して、アニメーションが終了したときに通知を受け、ビューのフレームを手動で元のエンドフレームに設定する必要があります。