2011-01-10 17 views
9

Bir metin alanını geçersiz olarak vurgulamak için çekirdek animasyonu kullanmaya çalışıyorum.NSTextField'ın arka plan rengini canlandırmak için çekirdek animasyonu nasıl kullanabilirim?

[[my_field animator] setBackgroundColor [NSColor yellowColor]] 

Alan arka plan rengini günceller, ancak değişikliği gerçekleştirmez. Alanın konumu gibi özelliklerin güncellenmesi doğru şekilde animasyonlar. Bunun nedeni, NSAnimatablePropertyContainer aramasında arka plan renginin bulunmamasıdır.

Ayrıca animasyonu açık bir şekilde oluşturmaya çalıştım.

CABasicAnimation *ani; 
ani = [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; 

ani.fromValue = CGColorCreateGenericRGB(1.0,1.0,1.0,1.0); 
ani.toValue = CGColorCreateGenericRGB(1.0,0.0,0.0,1.0); 
ani.repeatCount = 2; 
ani.autoreverses = YES; 
ani.duration = 1.0; 

[[my_field layer] addAnimation:ani forKey:"backgroundColor"]; 

Bunu yapmak için öneriler?

cevap

5

Arka plan rengini nasıl canlandırmayı hiçbir zaman başaramadım ki, bir CIFalseColor filtresini hareketlendirerek istenen etkiyi oluşturabiliyordum.

CIFilter *filter = [CIFilter filterWithName:@"CIFalseColor"]; 
[filter setDefaults]; 
[filter setValue:[CIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0] forKey:@"inputColor0"]; 
[filter setValue:[CIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0] forKey:@"inputColor1"]; 
[filter setName:@"pulseFilter"]; 
[[myField layer] setFilters:[NSArray arrayWithObject:filter]]; 

CABasicAnimation* pulseAnimation = [CABasicAnimation animation]; 
pulseAnimation.keyPath = @"filters.pulseFilter.inputColor1"; 

pulseAnimation.fromValue = [CIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]; 
pulseAnimation.toValue = [CIColor colorWithRed:0.995 green:1.0 blue:0.655 alpha:1.0]; 

pulseAnimation.duration = 0.3; 
pulseAnimation.repeatCount = 1; 
pulseAnimation.autoreverses = YES; 

[[myField layer] addAnimation:pulseAnimation forKey:@"pulseAnimation"]; 
+0

Bu uygulamadan özel filtreler (Özel adla filtreleri) kamu 10.11 (El Capitan) beta tarafından desteklenmeyen görünüyor. Ancak, setName satırını atlayıp anahtar yolunu @ "filters. CIFalseColor.inputColor1" olarak ayarladığınızda kod çalışır; direkt olarak. – deflozorngott

+1

Ayrıca 10.9'dan beri self.layerUsesCoreImageFilter = YES eklemeniz gerekiyor; – deflozorngott

15

Merry Christmas:

NSView *content = [[self window] contentView]; 
CALayer *layer = [content layer]; 

CABasicAnimation *anime = [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; 
anime.fromValue = (id)[layer backgroundColor]; 
anime.toValue = (id)CGColorCreateGenericGray(0.0f, 1.0f); 
anime.duration = 5.0f; 
anime.autoreverses = YES; 

[layer addAnimation:anime forKey:@"backgroundColor"]; 

Bu destekli katmanı kullanan bir bakış arka plan rengini animasyonlu olacaktır. init veya uyanık katmanı istediği ayarlamayı unutmayın:

[[[self window] contentView] setWantsLayer:YES]; 
İlgili konular