Fade in / Fade out для MAAttachedWindow - PullRequest
       19

Fade in / Fade out для MAAttachedWindow

7 голосов
/ 10 октября 2009

Я использую MAAttachedWindow Мэтта Джеммелла (http://mattgemmell.com/source) с NSStatusItem для отображения пользовательского представления в строке меню. Я запутался в том, как заставить его исчезать и исчезать. Обычно я сделать что-то вроде этого:

[window makeKeyAndOrderFront:self];
[[window animator] setAlphaValue:1.0];

и исчезать:

[[window animator] setAlphaValue:0.0];

Однако этот код, похоже, не работает с MAAttachedWindow. Есть идеи?

Спасибо

Ответы [ 2 ]

9 голосов
/ 25 февраля 2011

Извините, что занялся созданием старого поста, но я подумал, что стоит упомянуть, что он прекрасно работает для прямой установки значения альфа, без необходимости добавлять аксессоры / получатели.

Просто делаете (в зависимости от ваших настроек или курса):

[[self window] addChildWindow:attachedWindow ordered:NSWindowAbove];
[attachedWindow setAlphaValue:0.0];

[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0.5];  
[attachedWindow makeKeyAndOrderFront:self];
[[attachedWindow animator] setAlphaValue:1.0];
[NSAnimationContext endGrouping];

Работает просто отлично.

5 голосов
/ 20 октября 2009

Я не особенно хорошо разбираюсь в CoreAnimation и использовании неявных анимаций. Однако я смог заставить MAAttachedWindow постепенно исчезать, добавив явное свойство alphaValue в класс MAAttachedWindow:

@interface MAAttachedWindow : NSWindow {
    CGFloat _alphaValue;
...
}
-(CGFloat) alphaValue;
-(void) setAlphaValue:(CGFloat)windowAlpha;
...

@implementation MAAttachedWindow

- (CGFloat) alphaValue {
 return _alphaValue;
}

- (void) setAlphaValue:(CGFloat)windowAlpha {
    _alpha = windowAlpha;
 [super setAlphaValue:windowAlpha];
}
...

Добавив это, я смог заставить работать неявную анимацию setAlphaValue:

(код ниже взят из примера Мэтта "NSStatusItemTest")

- (void)toggleAttachedWindowAtPoint:(NSPoint)pt
{
...
    [attachedWindow makeKeyAndOrderFront:self];
 [[attachedWindow animator] setAlphaValue:1.0];

Я не уверен, почему явное определение свойства alphaValue работает. Я ожидаю, что унаследованная версия от NSWindow будет вызываться для неявной анимации. Хотя это не похоже на

...