我在尝试让自定义 UIView 类淡化它的背景时遇到了麻烦。我已经检查了以下 StackOverflow 问题,但它们似乎对我不起作用。
你如何明确地为 CALayer 的 backgroundColor 设置动画?
所以我有一个自定义的 UIView,用户可以在其中绘制东西。如果他们画的东西不正确,我想让背景颜色变红然后变回白色。
我在自定义 UIView 中有这个自定义方法,称为
- (void)indicateMistake;
当我调用该方法时,我希望它执行背景颜色动画,所以我在方法中有这个:
CABasicAnimation* fade = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
fade.fromValue = (id)[UIColor whiteColor].CGColor;
fade.toValue = (id)[UIColor redColor].CGColor;
[fade setDuration:3];
[self.layer addAnimation:fade forKey:@"fadeAnimation"];
但是当我这样做时似乎什么都没有发生。
所以然后我尝试了一个愚蠢的旋转动画,看看它是否有效:
CABasicAnimation* rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotate.toValue = [NSNumber numberWithInt:M_PI];
[rotate setDuration:1];
[self.layer addAnimation:rotate forKey:@"rotateAnimation"];
出于某种原因,自定义 UIView 会旋转。
然后阅读更多 StackOverflow 答案我尝试了这个:
[UIView animateWithDuration:3 animations:^{
[self setBackgroundColor: [UIColor redColor]];
} completion:^(BOOL finished) {
[self setBackgroundColor: [UIColor whiteColor]];
}];
这会将颜色从红色变为白色,然后立即变回白色。有时它是如此之快,我有时看不到它发生。如果我评论[self setBackgroundColor: [UIColor whiteColor]];
它保持红色。但是有节点逐渐从白色到红色的效果。
我已经没有想法了..任何帮助将不胜感激!