我需要根據某些條件動畫不同的CATextLayers。這就是爲什麼我寫了一個方法來接受圖層並對其進行動畫處理。這裏是:CABasicAnimation僅適用於使用相同方法創建的圖層
- (void) animateText:(CATextLayer*) text withColor: (CGColorRef) color andDuration: (NSTimeInterval) duration
{
CABasicAnimation *colorAnimation = [CABasicAnimation
animationWithKeyPath:@"foregroundColor"];
colorAnimation.duration = duration;
colorAnimation.fillMode = kCAFillModeForwards;
colorAnimation.removedOnCompletion = NO;
colorAnimation.fromValue = (id)[UIColor redColor].CGColor;
colorAnimation.toValue = (id)[UIColor blackColor].CGColor;
colorAnimation.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionLinear];
[text addAnimation:colorAnimation
forKey:@"colorAnimation"];
「文本」是一個CATextLayer創建,初始化並添加到其他方法的子層。 問題是此代碼不會使「文本」圖層生成動畫。
(請,不注重該方法接收的顏色。我暫時把紅色和黑色進行測試。)
我開始測試。如果我在這個方法中創建一個圖層,然後嘗試爲這個新創建的方法創建動畫,那麼它就可以正常工作。 如果我將代碼複製粘貼到創建所有圖層的方法中並嘗試對其中的一個進行動畫處理 - 它也可以正常工作。
但是我需要在不同的時刻動畫不同的圖層,所以我覺得這個功能是必不可少的。
請解釋我做錯了什麼。 預先感謝您。
更新: 這裏是如何的層被創建並放置到UIView的
//creating 110 text layers
CGFloat leftPoint = 0;
CGFloat topPoint = 0;
for (int i=0; i<11; ++i)
{
for (int j=0; j<10; ++j)
{
CATextLayer *label = [[CATextLayer alloc] init];
[label setString:[_labels objectAtIndex:j+(i*10)]]; // _labels contains letters to display
[label setFrame:CGRectMake(leftPoint, topPoint, _labelWidth, _labelHeight)]; // _labelWidth and _labelHeight are valid numbers
[label setAlignmentMode:kCAAlignmentCenter];
[label setForegroundColor:_textColor]; // _textColor is a CGColorRef type
[label setFont:(__bridge CFTypeRef)(_font.fontName)]; // font is UIFont type
[label setFontSize:[_font pointSize]];
[_textViews addObject:label]; // saving to internal array variable
[[self layer] addSublayer:label];
leftPoint += _labelWidth;
}
leftPoint = 0;
topPoint += _labelHeight;
}
如果我把這樣的代碼在我的動畫同樣的方法,它的工作原理。 它停止工作,當我在這樣的方法傳遞層:
for (int i = 0; i<labelsToHighlight.count; ++i) // labelsToHighlight is an array containing indexes of the CATextLayers which I need to animate
{
NSUInteger index = [[labelsToHighlight objectAtIndex:i] intValue];
[self animateText:[_textViews objectAtIndex:index] withColor: _highlightedTextColor andDuration:_redrawAnimationDuration];
}
顯示如何聲明並初始化CATextLayers? – Unheilig
同時顯示你在哪裏以及如何調用此方法。 – Snowman
檢查你的文本參數是否爲零 –