0

我有一个方法被覆盖的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. 流行语境
  4. 定位先前的上下文

这是一个理智的方法吗?还是 push 和 pop 上下文无法完成这样的巫术?


一种简单的方法:

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

4

1 回答 1

0

Pfft,答案非常简单。我猜是我 1,所以 0。

CGContextTranslateCTM(context, xOffset, yOffset);

是的,我不知何故忽略了一个事实,即应该存在一个很棒的函数来 translate CGContextRef,因为存在 scale 函数。

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

于 2012-08-22T13:45:32.943 回答