Появление / исчезновение для MAAttachedWindow

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

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

и исчезнуть:

[[window animator] setAlphaValue:0.0];

Однако этот код, похоже, не влияет на MAAttachedWindow. Любые идеи?

Спасибо


person indragie    schedule 10.10.2009    source источник


Ответы (2)


Я не особо разбираюсь в 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 будет вызываться для неявной анимации. Хотя, похоже, это не так.

person Michael Lamb    schedule 19.10.2009
comment
Прекрасно работает. Еще раз спасибо - person indragie; 20.10.2009

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

Просто выполните (в зависимости от вашей настройки или курса):

[[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];

Работает нормально.

person sudo rm -rf    schedule 25.02.2011
comment
У меня тоже работает - вам вообще не нужно изменять класс MAAttachedWindow. Может быть, он обновил исходники в какой-то момент? - person leecbaker; 18.11.2011