2012-10-15 4 views
2

У меня есть NSButton под названием _indicatorButton с изображением PNG (в основном зеленый светодиод, как PNG, установленный с setImage :) без рамки и текста. Я пытаюсь сделать его «вспышкой» со следующим кодом:Мигает NSButton с Core Animation

- (void)animateButton 
{ 
    NSLog(@"Animating…"); 
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
    [animation setFromValue:[NSNumber numberWithFloat:1.0]]; 
    [animation setToValue:[NSNumber numberWithFloat:0.0]]; 
    [animation setDuration:0.3f]; 
    [animation setTimingFunction:[CAMediaTimingFunction 
            functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
    [animation setAutoreverses:YES]; 
    [animation setRepeatCount:20000]; 

    [_indicatorButton.layer addAnimation:animation forKey:@"opacity"]; 
} 

... но ничего не происходит. Метод вызывается и ссылка в XIB в порядке, так как изменение изображения на кнопке программно отлично работает.

Любые подсказки, почему он не мигает вообще?

+0

Какая версия ОС X? Вы просматриваете слой с поддержкой? –

+0

@ DavidRönnqvist Горный лев. Что вы имеете в виду под «поддержкой»? – tamasgal

+0

Вы должны прочитать [документацию для 'wantLayer'] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html#//apple_ref/ occ/instm/NSView/setWantsLayer :) –

ответ

3

Для обратной совместимости, на OS X, по умолчанию не используются уровни основной анимации в качестве хранилища. Причина, по которой ничего не происходит, вероятно, что слой вашей кнопки равен нулю.

Вы можете сообщить, что с помощью myView.wantsLayer = YES; он должен быть защищен слоем. Пожалуйста, прочитайте the documentation for wantsLayer.