2014-07-12 49 views
0

我有一个图层,并在其drawInContext:我画一个属性的字符串与drawInRect:。这是我如何初始化图层。动画NSMutableAttributedString颜色 - 字符串消失

+ (id)layer 
{ 
    Character *layer = [[self alloc] init]; 
    if (layer) { 
     NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"Fabada" size:72]}; 
     layer.symbol = [[NSMutableAttributedString alloc] initWithString:@"X" attributes:attributes]; 
    } 
    return layer; 
} 

我想动画字符串的颜色,所以我有三个动力学属性。

@interface Character : CALayer 

@property (nonatomic, strong) NSMutableAttributedString *symbol; 
@property (nonatomic) int red; 
@property (nonatomic) int green; 
@property (nonatomic) int blue; 

@end 

@implementation Character 

@dynamic red; 
@dynamic green; 
@dynamic blue; 

/* ... */ 

在绘制方法中,我设置了前景色。

/* Set symbol color */ 
NSRange range = {0, [self.symbol length]}; 
UIColor *foreground = [UIColor colorWithRed:self.red /255.0 
             green:self.green/255.0 
             blue:self.blue /255.0 
             alpha:1]; 
[self.symbol addAttribute:NSForegroundColorAttributeName value:foreground range:range]; 
CGRect symbolRect; /* The frame */ 
[self.symbol drawInRect:symbolRect]; 

该字符根据需要出现在屏幕上。但是,一旦我将一个CABasicAnimation添加到图层,该符号就会消失。

CABasicAnimation *animation = [CABasicAnimation animation]; 
animation.duration = 10.0; 
animation.fillMode = kCAFillModeForwards; 
animation.removedOnCompletion = NO; 
animation.delegate = self; 
animation.fromValue = [NSNumber numberWithInt:0]; 
animation.toValue = [NSNumber numberWithInt:255]; 
[self.character addAnimation:animation forKey:@"blue"]; 

这个症状暗示了什么?我如何动画NSAttributedString属性?

回答

0

这是一个简单的实现- (id)initWithLayer:(id)layer方法的问题,因为它在动画开始时被调用。

- (id)initWithLayer:(id)layer 
{ 
    Character *temp = (Character *)layer; 
    self = [super initWithLayer:layer]; 
    if (self) { 
     self.symbol = temp.symbol; 
     self.red = temp.red; 
     self.green = temp.green; 
     self.blue = temp.blue; 
    } 
    return self; 
} 

现在物业结转,结果如预期。