Kho*_*hon 1 calayer uiview ios uibackgroundcolor
我在尝试获取自定义UIView类以淡化它的背景时遇到了麻烦.我查看了以下StackOverflow问题,但它们似乎对我不起作用.
你如何明确动画CALayer的backgroundColor动画?
所以我有一个自定义UIView,用户可以在其中绘制东西.如果他们绘制的内容不正确,我想让背景颜色渐变为红色然后再回到白色.
我在自定义UIView中调用了这个自定义方法
- (void)indicateMistake;
Run Code Online (Sandbox Code Playgroud)
当我调用该方法时,我希望它执行背景色动画,所以我在方法中有这个:
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"];
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时似乎没有任何事情发生.
那么我尝试了一个愚蠢的旋转动画,看看它是否有效:
CABasicAnimation* rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotate.toValue = [NSNumber numberWithInt:M_PI];
[rotate setDuration:1];
[self.layer addAnimation:rotate forKey:@"rotateAnimation"];
Run Code Online (Sandbox Code Playgroud)
由于某种原因,自定义UIView旋转.
然后阅读更多StackOverflow答案我试过这个:
[UIView animateWithDuration:3 animations:^{
[self setBackgroundColor: [UIColor redColor]];
} completion:^(BOOL finished) {
[self setBackgroundColor: [UIColor whiteColor]];
}];
Run Code Online (Sandbox Code Playgroud)
这会立即将颜色从红色变回白色.有时它太快我有时看不到它发生.如果我发表评论,[self setBackgroundColor: [UIColor whiteColor]];它会保持红色.但是节点逐渐变为白色到红色的效果.
我已经没有想法..任何帮助将不胜感激!
[UIView animateWithDuration:0.3f animations:^{
fade.layer.backgroundColor = [UIColor redColor].CGColor;
}
Run Code Online (Sandbox Code Playgroud)
假设您已将淡入淡出视图预先设置为您之前想要的白色.
您最后一次尝试动画跳回白色的原因是因为在animateWithDuration的完成子句中,您将视图设置为白色.
完成子句在动画结束时执行,因此动画(白红色)发生,然后编译器完成并将淡入淡出视图跳回白色.
作为额外奖励:
我相信你可能想知道你怎么能回到白色.
好吧,让我们假设按下UIButton这个函数调用"animateColors".所以说,只需实现一个BOOL.
- (void)animateColors {
if (!isRed) {
[UIView animateWithDuration:0.3f animations:^{
fade.layer.backgroundColor = [UIColor redColor].CGColor;
}];
isRed = YES;
} else if (isRed) {
[UIView animateWithDuration:0.3f animations:^{
fade.layer.backgroundColor = [UIColor whiteColor].CGColor;
}];
isRed = NO;
}
}
Run Code Online (Sandbox Code Playgroud)
显然,您将要在您的接口或头文件中创建布尔值isRed的属性声明.
所以我有一个自定义UIView,用户可以在其中绘制东西.
我假设这意味着你已经实施了-drawRect:.
IIRC,默认情况下(如果UIView.clearsContextBeforeDrawing已设置),上下文将填充视图的背景颜色,-drawRect:进行调用,并在屏幕上绘制结果位图而不是背景颜色.动画这将意味着两个位图之间的动画,这不是Core Animation特别擅长的.(我在这里的细节可能是错的,但它解释了这种行为).
最简单的解决方法是将背景颜色设置为,[UIColor clearColor]并为要绘制的视图后面的视图的背景颜色设置动画.这意味着视图不需要重绘,只需在"背景"上重新编译.
| 归档时间: |
|
| 查看次数: |
11517 次 |
| 最近记录: |