4

自从视网膜显示,突然这段绘图代码似乎不再工作了。绘制的图像比以前稍微偏移,并且看起来有些拉伸。

我在 UIControl 子类的 -drawRect: 方法中绘制了一些东西。我发现 UIControl 内部的当前比例确实是 2.0。此代码从 UIImage 获取 CGImage,它可能对比例一无所知。它作为参数提供给现在也采用一些点值的方法。

CGContextDrawImage(context, CGRectMake(drawingRect.origin.x, drawingRect.origin.y, img.size.width, img.size.height), [img CGImage]);

注意:drawingRect 以点为单位。NSLog 中的 img.size.width 会以点为单位输出正确的值,而 [img CGImage] 会输出 @2x 图像以用于视网膜显示。我做了检查以验证这一点:

NSLog(@"image height = %f (CGImage = %d)", img.size.height, CGImageGetHeight([img CGImage]));

控制台输出:image height = 31.000000 (CGImage = 62)

我将如何处理这里的@2x 图像?我必须手动将每个值与比例相乘吗?但这也会破坏屏幕上实际可见的矩形,或者不是?

4

1 回答 1

3

是的。

CGImageGetWidth([image CGImage]) == image.size.width * image.scale
CGImageGetHeight([image CGImage]) == image.size.height * image.scale

或者,您可以使用-[UIImage drawAtPoint:],-[UIImage drawInRect:]和其他自动处理比例的类似方法。如果你下拉到CGImage,你必须自己处理规模。

于 2010-09-19T10:33:43.817 回答