CoreGraphics 绘制内容时,是否可以使用标准化坐标系(从 0.0 到 1.0)而不是使用像素坐标?这肯定会让很多事情变得更容易...
是的,使用 CGAffineTransform。我在一个应用程序中执行此操作。 将所有坐标规范化为 -1.0 到 1.0,根据我正在绘制的视图的大小创建转换。
例:
CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(offset.x, offset.y);
可以变换每个点或创建路径并变换整个路径:
CGMutablePathRef transformedPath = CGPathCreateMutable();
CGPathAddPath(transformedPath, &transform, path);
正如@yurish指出的那样,如果更适合您,也可以使用CGContextScaleCTM
,CGContextTranslateCTM
等,而不是缩放点/路径。
核心图形不使用像素坐标。它使用抽象点,这些抽象点通过当前转换矩阵 (CTM) 转换为像素。如果适当调整 CTM(CGContextScaleCTM
等),则可以使用归一化坐标系。