CoreGraphics:在视图中心绘制rect

时间:2012-08-21 10:07:39

标签: cocoa-touch core-graphics drawrect cgcontext

我有一个UIView子类,其中drawRect:方法覆盖。在那里,我有很长的生成的代码来绘制一些东西。

生成的代码存在使路径/行的所有顶点/坐标硬编码的问题。因此,要绘制一个100x100的正方形,它将从0,0开始并转到0,100 - > 100,100 - > 100,0。要根据UIView bounds属性制作此形状比例,请执行以下操作:

// This is the size of the drawing. I always know this value beforehand.
CGSize contentSize = SHAPE_XMARK_SIZE;
CGFloat scaleX = self.bounds.size.width / contentSize.width;
CGFloat scaleY = self.bounds.size.height / contentSize.height;

CGContextScaleCTM(context, MIN(scaleX, scaleY), MIN(scaleX, scaleY));

就规模而言,一切都很好。现在,我希望绘图的位置也与边界相关。我想以某种方式使drawRect:方法也基于bounds对齐绘图。

我想的是:

  1. 推送上下文方法
  2. 绘制代码
  3. pop context
  4. 定位上一个上下文
  5. 这是一种理智的方法吗?或推动和弹出环境无法完成这样的巫术?


    一个简单的方法:

    为了回答“你有什么尝试”的问题,我尝试将我绘制的视图与bounds大小等于绘图大小隔离,然后将该视图嵌入到另一个视图中...它的工作原理。但是,这种方法很乏味,如果可能的话,我宁愿避免使用它。

1 个答案:

答案 0 :(得分:0)

Pfft,答案非常简单。我1,SO 0,我猜。

CGContextTranslateCTM(context, xOffset, yOffset);

是的,我在某种程度上忽略了这样一个事实:由于存在比例函数,因此应该存在一个很棒的函数来翻译CGContextRef

其余的都是简单的数学运算来实现垂直和放大水平对齐。