iOS开发中如何实现一个平滑的颜色过渡
如何从A颜色平滑的过渡到B颜色
同一个视图,随着进度或者其他过程的变化,从A颜色过渡到B颜色。
所有的颜色都是是由RGB三原色组成,在iOS开发中,通过RGB值的组合来显示不同的颜色。一次A-B其实就是RGB值的改变,如何平滑的过渡呢?那就是等比例的改变RGB值!
那么,如何获取颜色的RGB值呢?
-(NSArray*)getRGBDictionaryByColor:(UIColor*)originColor
{
CGFloatr=0,g=0,b=0,a=0;
if([selfrespondsToSelector:@selector(getRed:green:blue:alpha:)]){
[originColorgetRed:&rgreen:&gblue:&balpha:&a];
}
else{
constCGFloat*components=CGColorGetComponents(originColor.CGColor);
r=components[0];
g=components[1];
b=components[2];
a=components[3];
}
return@[@(r),@(g),@(b)];
}
有了上面的方法,下面就可以计算出连个颜色之间的色差
-(NSArray*)transColorBeginColor:(UIColor*)beginColorandEndColor:(UIColor*)endColor{
NSArray*beginColorArr=[selfgetRGBDictionaryByColor:beginColor];
//NSArray*endColorArr=[selfgetRGBDictionaryByColor:endColor];
NSArray*endColorArr=@[@(1.0),@(1.0),@(1.0)];
return@[@([endColorArr[0]doubleValue]-[beginColorArr[0]doubleValue]),@([endColorArr[1]doubleValue]-[beginColorArr[1]doubleValue]),@([endColorArr[2]doubleValue]-[beginColorArr[2]doubleValue])];
}
最后通过过渡系数来返回当前的颜色
-(UIColor*)getColorWithColor:(UIColor*)beginColorandCoe:(double)coeandMarginArray:(NSArray*)marginArray{ NSArray*beginColorArr=[selfgetRGBDictionaryByColor:beginColor]; doublered=[beginColorArr[0]doubleValue]+coe*[marginArray[0]doubleValue]; doublegreen=[beginColorArr[1]doubleValue]+coe*[marginArray[1]doubleValue]; doubleblue=[beginColorArr[2]doubleValue]+coe*[marginArray[2]doubleValue]; returnRGBNUM(red,green,blue); }
把获取到的颜色赋值给相应的控件,这样便完成了一个颜色过渡的效果。
以上所述是小编给大家介绍的iOS开发中如何实现一个平滑的颜色过渡,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!