關於ios顏色漸進的總結

來源:互聯網
上載者:User

最近一直在做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, NULL, 2);
 

    

    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);


至此,就完成了。我實現的是在螢幕裡畫一個矩形,然後在矩形裡,實現漸進色的功能,大家可以嘗試一下。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.