Is it true that if it is in UIKit, including drawRect
, the HD aspect of Retina display is automatically handled? So does that mean in drawRect
, th
After doing more research, I found the following solution:
If you have to use CGBitmapContextCreate
, then there are two steps that can make the context with a size and coordinate system tailored to a standard display or Retina display:
float scaleFactor = [[UIScreen mainScreen] scale];
CGSize size = CGSizeMake(768, 768);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL,
size.width * scaleFactor, size.height * scaleFactor,
8, size.width * scaleFactor * 4, colorSpace,
kCGImageAlphaPremultipliedFirst);
CGContextScaleCTM(context, scaleFactor, scaleFactor);
The sample is to create a 768 x 768 point region, and on The New iPad, it will be 1536 x 1536 pixel. On iPad 2, it is 768 x 768 pixel.
A key factor is that, CGContextScaleCTM(context, scaleFactor, scaleFactor);
is used to adjust the coordinate system, so that any drawing by Core Graphics, such as CGContextMoveToPoint
, etc, will automatically work, no matter it is standard resolution or the Retina resolution.
One more note is that UIGraphicsBeginImageContext(CGSizeMake(300, 300));
will create a 300 x 300 pixel on Retina display, while UIGraphicsBeginImageContextWithOptions(CGSizeMake(300, 300), NO, 0.0);
will create 600 x 600 pixel on the Retina display. The 0.0
is for the method call to automatically give the proper size for standard display or Retina display.