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开发中如何实现一个平滑的颜色过渡,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!