Здесь есть три проблемы, одна из которых определенно неочевидна.
Во-первых, ваш делегат анимации не вызывается, потому что подпись сообщения для вашего метода делегата неверна, она должна быть:
- (BOOL)animationShouldStart:(NSAnimation*) _anim
Во-вторых, чтобы исчезнуть в окне, вам нужно передать само окно как объект для NSViewAnimationTargetKey
, а не его представление содержимого.
В-третьих, эффект исчезновения окна будетработает только в том случае, если окно отображается на экране, но с альфа-значением, равным нулю.
Итак, в верхней части блока кода вставьте следующее:
[self.window orderFront:self];
[self.window setAlphaValue:0.0];
Это должно сделатьзатухание окон в анимации работает просто отлично.Однако учтите, что, поскольку вы не меняете оконную рамку, вы можете сократить свой словарь анимации до следующего:
NSDictionary *fadeInAttrs = [NSDictionary dictionaryWithObjectsAndKeys:
_window, NSViewAnimationTargetKey,
NSViewAnimationFadeInEffect, NSViewAnimationEffectKey,
nil];