自从有了视网膜显示,突然这段绘图代码似乎不再起作用了。绘制的图像比之前稍微偏移,并且显得有些拉伸(stretch)。
我正在 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]));
控制台输出:图像高度 = 31.000000 (CGImage = 62)
我将如何处理这里的@2x图像?我必须手动将每个值与比例相乘吗?但这也会破坏屏幕上实际可见的矩形,或者不会?
最佳答案
是的。
CGImageGetWidth([image CGImage]) == image.size.width * image.scale
CGImageGetHeight([image CGImage]) == image.size.height * image.scale
或者,您可以使用 -[UIImage drawAtPoint:]
、-[UIImage drawInRect:]
和其他类似的自动处理比例的方法。如果你下拉到CGImage
,你必须自己处理缩放。
关于iphone - 在这种情况下,我必须将比例乘以视网膜显示的点值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3745126/