不幸的是,颜色不与UIView的动画动画。 对this question的回答在不使用Core Animation的情况下提供了一些很好的解决方法。
如果你不介意使用CATextLayer,而不是一个UILabel,那么颜色(和你的榜样缩放)可以是动画这样的:
#import <QuartzCore/QuartzCore.h>
//Also need to add QuartzCore framework to project (as well as the import).
//
-(void)animateTextLayer {
CGFloat animationDuration = 5;
CATextLayer *textLayer = [CATextLayer layer];
[textLayer setString:@"Hello World"];
[textLayer setForegroundColor:[UIColor purpleColor].CGColor];
[textLayer setFontSize:30];
[textLayer setFrame:CGRectMake(20, 200, 300, 40)];
[[self.view layer] addSublayer:textLayer];
CABasicAnimation *colorAnimation = [CABasicAnimation
animationWithKeyPath:@"foregroundColor"];
colorAnimation.duration = animationDuration;
colorAnimation.fillMode = kCAFillModeForwards;
colorAnimation.removedOnCompletion = NO;
colorAnimation.fromValue = (id)[UIColor purpleColor].CGColor;
colorAnimation.toValue = (id)[UIColor greenColor].CGColor;
colorAnimation.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionLinear];
CAKeyframeAnimation *scaleAnimation = [CAKeyframeAnimation
animationWithKeyPath:@"transform"];
NSArray *scaleValues = [NSArray arrayWithObjects:
[NSValue valueWithCATransform3D:CATransform3DScale(textLayer.transform, 1, 1, 1)],
[NSValue valueWithCATransform3D:CATransform3DScale(textLayer.transform, 1.5, 1.5, 1)],
[NSValue valueWithCATransform3D:CATransform3DScale(textLayer.transform, 0.5, 0.5, 1)], nil];
[scaleAnimation setValues:scaleValues];
scaleAnimation.fillMode = kCAFillModeForwards;
scaleAnimation.removedOnCompletion = NO;
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
animationGroup.duration = animationDuration;
animationGroup.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionLinear];
animationGroup.fillMode = kCAFillModeForwards;
animationGroup.removedOnCompletion = NO;
animationGroup.animations =
[NSArray arrayWithObjects:colorAnimation, scaleAnimation, nil];
[textLayer addAnimation:animationGroup forKey:@"animateColorAndScale"];
}
只要有将设置在CATextLayer – bioffe 2010-11-19 22:52:12
垂直对齐的方式只用原来的UILabel自己这里有一个_much_更好的解决方法:HTTP://计算器.com/questions/6442774/is-uilabels-backgroundcolor-not-animatable/6442868#6442868 – Anna 2012-03-13 15:29:40
@AnnaKarenina你指出的链接是动画背景颜色。 – xhan 2012-07-16 11:53:53