我用这个绘制矩形做了一个“圆形”视图
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(ctx, color.CGColor);
CGContextAddEllipseInRect(ctx, rect);
CGContextFillPath(ctx);
}
当我尝试使用放大视图时CGAffineTransformMakeScale(2.0, 2.0)
,结果边缘模糊且像素化。然而,编程指南说 Quartz 使用基于矢量的命令来绘制视图,并且在使用仿射变换时它们将继续看起来不错:
Quartz 绘图系统使用基于矢量的绘图模型。与基于光栅的绘图模型(其中绘图命令对单个像素进行操作)相比,Quartz 中的绘图命令是使用固定比例的绘图空间(称为用户坐标空间)指定的。 iPhone OS 然后将该绘图空间中的坐标映射到设备的实际像素上。该模型的优点是,使用矢量命令绘制的图形在使用仿射变换放大或缩小时仍然看起来不错.
或者我没有使用基于矢量的命令?如果没有,我该如何画一个圆呢?
Thanks.
对视图应用变换不会导致视图被重绘。它所做的只是缩放视图层,即存储在 GPU 上的位图纹理。这将导致图形模糊。
在 iPhone 上绘制视图时,-drawRect:
被调用来为视图层提供内容。然后,该内容将作为纹理缓存在 GPU 上。
他们在指南中提到的是在绘制矢量图形时在 -drawRect: 期间应用变换。如果你在那里使用转换(通过CGContextConcatCTM()
或类似的),圆将在更大的比例下平滑地绘制。但是,您还需要调整视图大小以反映这个较大的形状。我建议使用scale
自定义视图子类上的属性,您可以将其设置为不同的比例因子,并且将处理调整视图大小并急剧重绘其内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)