не удается исчезнуть в окне с помощью NSViewAnimation - PullRequest
2 голосов
/ 27 июля 2011

См. Фрагмент кода. Попытка исчезнуть в главном окне с помощью NSViewAnimation. У NIB просто есть окно / меню (например, этот проект почти прямо из мастера приложений какао). В NIB было изменено окно, сняв флажок «Видимо при запуске». Метод делегата animationShouldStart никогда не вызывается. Если это вообще имеет значение, я на 10.7 в xcode 4.2.

Я просто не понимаю, почему это не работает. Пожалуйста, придайте мне смысл.

Спасибо

#import "TestAppDelegate.h"

@implementation TestAppDelegate

@synthesize window = _window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
  //  [[self window] orderFront: self];
    NSRect _saveRect = [_window  frame];
    NSRect _zeroRect = _saveRect;
    _zeroRect.size = NSMakeSize(0, 0);   
    NSDictionary *fadeInAttrs = [NSDictionary dictionaryWithObjectsAndKeys:
                                 [_window contentView], NSViewAnimationTargetKey,
                                 NSViewAnimationFadeInEffect, NSViewAnimationEffectKey,
                                 [NSValue valueWithRect:_zeroRect], NSViewAnimationStartFrameKey,
                                 [NSValue valueWithRect:_saveRect], NSViewAnimationEndFrameKey,
                                 nil];

    NSViewAnimation *_viewAnimIn = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects: fadeInAttrs, nil]];

    [_viewAnimIn setDuration:1.0];
    [_viewAnimIn setAnimationCurve:NSAnimationEaseInOut];  
    [_viewAnimIn setAnimationBlockingMode:NSAnimationBlocking];
    [_viewAnimIn setDelegate:self];
    [_viewAnimIn startAnimation];
}

- (BOOL)animation:(NSAnimation *)animation animationShouldStart:(NSAnimation*) _anim
{
    NSLog(@"%@ shouldStart", _anim);
    return YES;
}

@end

1 Ответ

6 голосов
/ 27 июля 2011

Здесь есть три проблемы, одна из которых определенно неочевидна.

Во-первых, ваш делегат анимации не вызывается, потому что подпись сообщения для вашего метода делегата неверна, она должна быть:

- (BOOL)animationShouldStart:(NSAnimation*) _anim

Во-вторых, чтобы исчезнуть в окне, вам нужно передать само окно как объект для NSViewAnimationTargetKey, а не его представление содержимого.

В-третьих, эффект исчезновения окна будетработает только в том случае, если окно отображается на экране, но с альфа-значением, равным нулю.

Итак, в верхней части блока кода вставьте следующее:

[self.window orderFront:self];
[self.window setAlphaValue:0.0];

Это должно сделатьзатухание окон в анимации работает просто отлично.Однако учтите, что, поскольку вы не меняете оконную рамку, вы можете сократить свой словарь анимации до следующего:

NSDictionary *fadeInAttrs = [NSDictionary dictionaryWithObjectsAndKeys:
                             _window, NSViewAnimationTargetKey,
                             NSViewAnimationFadeInEffect, NSViewAnimationEffectKey,
                             nil];
...