关于ios颜色渐进的总结

来源:互联网 发布:通用字体软件下载 编辑:程序博客网 时间:2024/04/30 11:29

最近一直在做iphone自定义控件,对于ios上面的图形控制和一些api也有了些认识,所以总结一些。

颜色渐进是做图像的基本东西,要想做的漂亮,肯定必不可少。

用到的基本api是 CGGradientRef.

/**

 画图形渐进色方法,此方法只支持双色值渐变

 @param context     图形上下文的CGContextRef

 @param clipRect    需要画颜色的rect

 @param startPoint  画颜色的起始点坐标

 @param endPoint    画颜色的结束点坐标

 @param options     CGGradientDrawingOptions

 @param startColor  开始的颜色值

 @param endColor    结束的颜色值

 */

- (void)DrawGradientColor:(CGContextRef)context 

                     rect:(CGRect)clipRect  

                    point:(CGPoint) startPoint

                    point:(CGPoint) endPoint 

                  options:(CGGradientDrawingOptions) options 

               startColor:(UIColor*)startColor 

                 endColor:(UIColor*)endColor 

{

    UIColor* colors [2] = {startColor,endColor};

    CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();

    CGFloat colorComponents[8];  

    

    for (int i = 0; i < 2; i++) {  

        UIColor *color = colors[i];  

        CGColorRef temcolorRef = color.CGColor;

        

        const CGFloat *components = CGColorGetComponents(temcolorRef);  

        for (int j = 0; j < 4; j++) {  

            colorComponents[i * 4 + j] = components[j];  

        }         

    }  

    

    CGGradientRef gradient =  CGGradientCreateWithColorComponents(rgb, colorComponents, NULL2);  

    

    CGColorSpaceRelease(rgb);

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, options);

    CGGradientRelease(gradient);

}

这样的方法可是实现颜色的渐变,但是这只是双色渐变,如果想多色渐变的话,那就生成UIColor* 数组到响应的数目,同时在遍历color生成CGColorRef 的时候,用数组长度的item下标把颜色一一取出来即可。
同时,在这里我们画颜色渐进的宽度,需要用到clipRect. 这个rect  大小是需要定义的,并且我们需要把context 给前切成这个rect的大小。

比如我们当前的 context是对于整个屏幕的,我们需要在中间截取一个rect,则先保持住现在的context.  

CGContextSaveGState(context);

然后我们截取对应的context

CGContextClipToRect(context, clipRect); 

......

......

用完这个context之后,我们还要恢复到之前的context

CGContextRestoreGState(context);


至此,就完成了。我实现的是在屏幕里画一个矩形,然后在矩形里,实现渐进色的功能,大家可以尝试一下。


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 倒西太阳晒的房子夏天很热怎么办 客厅壁纸用的浅灰色影视墙怎么办 我喜欢玩手机游戏妈妈很生气怎么办 家里墙上有很多白色的虫子怎么办 3岁半宝宝学数字学不会怎么办 小孩子读一年级拼音读不好要怎么办 4个月的婴儿恶心干呕怎么办 生了小孩后胆汁酸偏高怎么办 9个月宝宝吃盐了怎么办 两个月宝宝母乳拉大便太稀怎么办呀 两个月的宝宝不拉大便怎么办 两个月宝宝五天没拉大便怎么办 4个月宝宝不拉大便怎么办 2个月宝宝3天没拉大便怎么办 宝宝拉不出大便老是憋的哭怎么办 九个月的宝宝不爱吃水果怎么办 顺产侧切伤口发炎化脓有臭味怎么办 一岁宝宝感冒发烧39度怎么办 宝宝二岁半了只吃水果不吃饭怎么办 8个月小孩发烧39度怎么办 咳嗽吃了很多药都不见效果怎么办 生完孩子半个月奶水越来越少怎么办 买到了坏了的水果商家不赔怎么办 小孩奶不够吃又不吃奶粉怎么办 10个月的宝宝便秘很严重怎么办 四岁的宝宝突然不怎么吃饭怎么办 1岁7个月宝宝突然不爱吃饭怎么办 宝宝发烧好了之后不吃辅食怎么办 吃母乳的宝宝不喝奶粉怎么办 奶水不足宝宝又不喝奶粉怎么办 6个月宝宝断奶哭闹不用奶瓶怎么办 小孩不爱吃饭怎么办该吃些什么 二个月宝宝只认母乳不喝牛奶怎么办 满月宝宝只认奶粉不认母乳怎么办 宝宝四个月只认奶瓶不认母乳怎么办 新生儿只认奶瓶不认母乳怎么办 7个月宝宝不吃辅食怎么办 8个月小孩不吃辅食怎么办 9个月小孩不吃辅食怎么办 十一个月宝宝拉肚子拉水怎么办 小孩好动上课也坐不住会怎么办