iOS CGColor versus UIColor

ios, objective-c, uicolor

Solution

`UIColor` inherits from `NSObject` and is 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.

Problem

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?

Original source