0

我试图在我的一个视图中的 drawRect 中绘制一个框/路径,路径 rect 是:

CGRect pathRect = CGRectMake(self.buttonSize_ + 25, commentYOffset, rect.size.width - 80, 40);

在此之前我有:

  CGContextSetTextMatrix(context, CGAffineTransformIdentity);
        CGContextTranslateCTM(context, 0.0,  rect.size.height);
        CGContextScaleCTM(context, 1.0, -1.0);

我希望这条路径从顶部开始绘制 100 像素,所以我所做的就是将 commentYOffset 设置为 100,但这并没有这样做。我做错了什么,所以当我绘制这条路径时,它从顶部开始 100 像素?

4

1 回答 1

0

CGContextTranslateCTM(context,…)将翻译转换应用于上下文。在绘图上下文中的任何现有变换之后应用转换。您发布的代码中的最后两行有效地翻转了绘图上下文的垂直方向。只需将它们排除在外,路径就会绘制到您想要的位置。

编辑:阿迪特说他需要变换来保持一些文本绘制正面朝上,所以:如果你需要在你的绘图上下文中翻转垂直线(就像你正在做的那样),那么请记住,在应用这些变换之后,零 - y 在rect 的底部和正 y 轴指向 rect 的顶部。因此,要从顶部绘制路径 100 像素,您应该

commentYOffset = CGRectGetMaxY(rect) - 40.0 - 100.0;

那 40 是因为你的 rect 是 40 点高。实际上,制作这些命名常量是更好的做法,这样您就不必在未来到处复制幻数。然后您的代码将如下所示:

commentYOffset = CGRectGetMaxY(rect) - kPathRectHeight - kPathTopMargin;
于 2013-03-19T08:14:53.313 回答