这个主题已经被抓过一次或两次,但我仍然感到困惑。和谷歌很不友好。

由于石英允许为任意性的坐标系统使用仿射的变换,我希望能够画画的东西,如布局使用的真实生活中的协调,例如脚。

所以基本上,为了一个例子,我想规模的观因此,当我画一个10×10矩形(觉得有10英寸的框例如),我得到一个60x60素矩形。

它的工作,除了矩我是很模糊。另一个问题是这里有了一个答复,解释了为什么。但是,我不确定我理解原因为什么,而且,我不知道怎么修它。这里是我的代码:

我把我的坐标在我的系统 awakeFromNib 定义的看法:

- (void) awakeFromNib {
    CGAffineTransform scale = CGAffineTransformMakeScale(6.0, 6.0);
    self.transform = scale;
}

这是我画的程序

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGRect r = CGRectMake(10., 10., 10., 10.);
    CGFloat lineWidth = 1.0;
    CGContextStrokeRectWithWidth(context, r, lineWidth);
}

广场上我得到的是缩放的只是好的,但完全模糊。玩 lineWidth 没有帮助:时 lineWidth 设定较小,它变得更轻,但不是保鲜盒。

所以有一种方法来设立了一个看到有一个缩协调系统,这样我可以用我域的坐标?或者我应该回去和执行缩放在我的画程序?

注意这个问题不会发生翻译或旋转。

感谢

有帮助吗?

解决方案 2

好了,经常在解释这个问题使我的解决方案。

的问题是,它已经被吸入到一个位缓冲器之后的视图变换属性应用于它。缩放变换具有绘图之前,即要施加。在drawRect方法。所以划伤我给awakeFromNib,这里是一个正确的drawRect:

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGAffineTransform scale = CGAffineTransformMakeScale(6.0, 6.0);
    CGContextConcatCTM(context, scale);
    CGRect r = CGRectMake(10., 10., 10., 10.);
    CGFloat lineWidth = 0.1;
    CGContextStrokeRectWithWidth(context, r, lineWidth);
}

其他提示

该[抚摸]矩我是很模糊。

通常,这是因为你绘制的矩形,在整个号码协调和你的线宽度为1。

在PostScript(并因此在其后裔:AppKit、PDF和石英)、绘图单位的默认来分,1点被完全1/72英寸。Mac和目前对待每一个这样点1素,而不管实际的解决的屏幕(s),因此,在一个实际的意义上,点(默认情况下,在Mac和手)平等要素。

在PostScript及其后代的、整体的协调行之间点。0,0,例如,是左下角的下左一点。1,0是右下角那个相同点(和左下角的下一个点向右)。

A行程中心的道路上你在抚摸。因此,一半会内部的道路,一半以外。

在(概念性地)72-新闻部世界的Mac,这两个事实结合起来,产生一个问题。如果1pt等于1素,并应用1-pt的行程之间的两个象素,则一半的行程会打击的每一个这些像素。

石,至少会使这一过绘画目前的颜色成像素的一半的颜色是阿尔法。它确定这个多少素是由概念性的行程;如果你使用了1.5-pt线的宽度,有一半是0.75pt,这是四分之三的每个1-pt素,所以颜色呈现在0.75阿尔法。这当然,自然的结论:如果使用2-pt线的宽度,每一像素是完全复盖,因此阿尔法1.这就是为什么你可以看到这种影响1-pt的行程,而不2-pt的行程。

有几种解决方法:

  • 半点翻译:在箱子,你翻译和右半个点,以弥补上述1-pt-切-在半分割。

    这工作简单的情况,但片出来的时候,你涉及任何其他协调转变,除了全点的翻译。这就是说,您可以翻译30、20和它还会的工作,但是如果你翻译33+1/3时,25.252525...,或者如果规模或旋转,你的一半点的翻译将是无用的。

  • 内行程:夹第一,然后双线路的宽度(因为你只会提请它的一半),随后的行程。

    这可能需要gstate杂耍如果你有很多其他的绘图做到的,因为你不想要那剪切路径影响你其他的绘图。

  • 外行程:基本上相同的一个内部行程,但是反向的道路之前剪报。

    可以更好地(小gstate杂耍)于内部行程,如果你确定的路径你要笔触不会重叠。另一方面,如果你也想要填补的道路,gstate杂耍的回报。

*这不会永远持续下去。苹果已经暗示一段时间,他们会改变至少Mac的绘图的决议在某一点。API基金会为这种变化是几乎所有现在;这是所有问题的苹果投掷的开关。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top