Colors and Patterns
A color is a CGColor (actually a CGColorRef). CGColor is not difficult to work with, and is bridged to UIColor through UIColor’s colorWithCGColor:
and CGColor
methods.
A pattern, on the other hand, is a CGPattern (actually a CGPatternRef). You can create a pattern and stroke or fill with it. The process is rather elaborate. As an extremely simple example, I’ll replace the red triangular arrowhead with a red-and-blue striped triangle (Figure 15-7). To do so, remove this line:
Figure 15-7. A patterned fill
CGContextSetFillColorWithColor(con, [[UIColor redColor] CGColor]);
In its place, put the following:
CGColorSpaceRef sp2 = CGColorSpaceCreatePattern(NULL); CGContextSetFillColorSpace (con, sp2); CGColorSpaceRelease (sp2); CGPatternCallbacks callback = { 0, &drawStripes, NULL }; CGAffineTransform tr = CGAffineTransformIdentity; CGPatternRef patt = CGPatternCreate(NULL, CGRectMake(0,0,4,4), tr, 4, 4, kCGPatternTilingConstantSpacingMinimalDistortion, true, &callback); CGFloat alph = 1.0; CGContextSetFillPattern(con, patt, &alph); CGPatternRelease(patt);
That code is verbose, but it is almost entirely boilerplate. To understand it, it almost helps to read it backward. What we’re leading up to is the call to CGContextSetFillPattern
; instead of setting a fill color, we’re setting a fill pattern, to be used the next time we fill a path (in this case, the triangular arrowhead). ...
Get Programming iOS 4 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.