Подтвердить что ты не робот

Cocoa: анимация NSView

Это так просто, как может быть, поэтому я не могу, чтобы жизнь меня искала, что неправильно, я просмотрел документацию в качестве руководства, но он все еще не работал. У меня есть вид в увеличенном виде. Предполагается, что IBAction исчезнет из внутреннего представления... что он. Вот что у меня есть:

NSViewAnimation *theAnim;
NSMutableDictionary *viewDict;

// Create the attributes dictionary for the view.
viewDict = [NSMutableDictionary dictionaryWithCapacity:2];

// Set the target object to be the view.
[viewDict setObject:_innerView forKey:NSViewAnimationTargetKey];

// Set this view to fade out
[viewDict setObject:NSViewAnimationFadeOutEffect forKey:NSViewAnimationEffectKey];

theAnim = [[NSViewAnimation alloc] initWithViewAnimations:@[viewDict]];

// Set some additional attributes for the animation.
[theAnim setDuration:1.0];

// Run the animation.
[theAnim startAnimation];

Я проверил viewDict и theAnim на NSLogs, и ни один из них не равен нулю. Я в значительной степени скопировал это из старой программы, в которой я работал, не могу найти, что сейчас не так.

Я нахожусь на xcode 5.1.1, спасибо за помощь.

4b9b3361

Ответ 1

Современный подход намного проще:

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
    context.duration = 1;
    view.animator.alphaValue = 0;
}
completionHandler:^{
    view.hidden = YES;
    view.alphaValue = 1;
}];

Если иерархия представления поддерживается с помощью слоя, на самом деле этого достаточно:

view.animator.hidden = YES;