iOS CGColor versus UIColor

Dan Vasile picture Dan Vasile · Nov 22, 2013 · Viewed 7.5k times · Source

I am using 2 variations of the same color, a light and dark version, to create a gradient.

Code:

CAGradientLayer *gradient = [CAGradientLayer layer];

UIColor *light = [baseColor lightVersion];

UIColor *dark = [baseColor darkVersion];

gradient.colors = [NSArray arrayWithObjects:(id)[light CGColor], (id)[dark CGColor], nil];

The problem is, I noticed that the CGColor version of the original UIColor version is different. Why is that? What is the difference between the UIColor and CGColor and why are they different?

Answer

Nirav Gadhiya picture Nirav Gadhiya · Nov 22, 2013

UIColor is Inherits from NSObject and associated with UIKit Framework while CGColor is associated with CoreGraphics and CGColor is derived from CFType.

So if you are using UIKit elements then you can use UIColor, But if you are using drawing using Core Graphics or working with CALayer you must use CGColor.

As per Documentation of UIColor

Many methods in UIKit require you to specify color data using a UIColor object, and for general color needs it should be your main way of specifying colors. The color spaces used by this object are optimized for use on iOS-based devices and are therefore appropriate for most drawing needs. If you prefer to use Core Graphics colors and color spaces instead, however, you may do so.