2011-01-02 4 views
2

In einer meiner Ansichten, die gezogen werden kann, wenn der Benutzer es an einem unpassenden Ort ablegt, fällt es einfach auf den ursprünglichen Rahmen zurück, der aufgezeichnet wurde, als die Maus unterging. Dies wurde gut funktioniert für ein paar Tage ohne Animation, aber ich habe beschlossen, Animation vorstellen:Verwendung von NSViewAnimation mit NSAnimationEaseOut seltsames Verhalten

-(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]; 
    } 
} 

Die mit NSAnimationLinear arbeitet, und der Standard NSAnimationEaseInOut, aber was ich will eigentlich nur das Gefühl der Verzögerung, die ich NSAnimationEaseOut übernehmen soll. Aus irgendeinem Grund schnappt sich die Ansicht jedoch sofort den Frame, an dem sie enden soll, animiert dann das Zurückgleiten dorthin, wo der Cursor sie abgelegt hat (Startframe) und springt dann zurück zum Endframe .

Alle anderen Modi (NSAnimationLinear, NSAnimationEaseIn, NSAnimationEaseInOut) scheinen gut zu funktionieren. Missverstehe ich den Zweck von NSAnimationEaseOut?

Antwort

0

Aus irgendeinem Grund müssen Sie die Start- und Enderahmen umdrehen, um NSAnimationEastOut zu funktionieren. Außerdem müssen Sie einen Animationsdelegaten festlegen, damit Sie benachrichtigt werden können, wenn die Animation beendet ist. Anschließend müssen Sie den Rahmen der Ansicht manuell auf den ursprünglichen Endrahmen festlegen.