Jak animować efekt fadeIn fadeIn w NSTextField podczas zmiany jego tekstu?

Próbuję napisać kategorię dlaNSTextField który doda nową metodęsetAnimatedStringValue. Ta metoda ma ładnie zanikać bieżący tekst, a następnie ustawić nowy tekst, a następnie zanikać.

Poniżej moja implementacja: -

- (void) setAnimatedStringValue:(NSString *)aString {

    if ([[self stringValue] isEqualToString:aString]) {
        return;
    }

    NSMutableDictionary *dict = Nil;

    NSViewAnimation *fadeOutAnim;
    dict = [NSDictionary dictionaryWithObjectsAndKeys:self, NSViewAnimationTargetKey,
            NSViewAnimationFadeOutEffect, NSViewAnimationEffectKey, nil];
    fadeOutAnim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:
                                                               dict, nil]];
    [fadeOutAnim setDuration:2];
    [fadeOutAnim setAnimationCurve:NSAnimationEaseOut];
    [fadeOutAnim setAnimationBlockingMode:NSAnimationBlocking];

    NSViewAnimation *fadeInAnim;
    dict = [NSDictionary dictionaryWithObjectsAndKeys:self, NSViewAnimationTargetKey,
            NSViewAnimationFadeInEffect, NSViewAnimationEffectKey, nil];
    fadeInAnim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:
                                                                   dict, nil]];
    [fadeInAnim setDuration:3];
    [fadeInAnim setAnimationCurve:NSAnimationEaseIn];
    [fadeInAnim setAnimationBlockingMode:NSAnimationBlocking];

    [fadeOutAnim startAnimation];

    [self setStringValue:aString];

    [fadeInAnim startAnimation];
}

Nie trzeba dodawać, ale powyższy kod w ogóle nie działa. Jedynym efektem, jaki widzę, jest migotanie paska postępu w tym samym oknie. Być może dlatego, że blokuję główny runloop, próbując go „animować”.

Proszę zasugerować, co jest nie tak z powyższym kodem.

Uwaga dodatkowa:

setAnimatedStringValue jest zawsze wywoływany przez aNSTimer, który jest dodawany do głównegoNSRunLoop.

questionAnswers(3)

yourAnswerToTheQuestion