0

我正在绘制一系列 UIBezierPath,它们都有不同的大小和位置。我想将每个形状缩放到特定大小并将其移动到UIView. 我现在正在和他一起工作CGAffineTransformation。它很快变得混乱,因为位置和大小不适用于所有形状。

有什么方法可以将 a 缩放UIBezierPath到特定大小并将其转换(移动)到适用于大多数形状的特定位置?也许有一种方法可以设置形状的大小和位置,而不必使用我不知道的转换?我画的形状大小都非常不同,有些边缘呈锯齿状。

到目前为止,这就是我使用 AffineTransformations 所做的事情。

CGAffineTransform scale = CGAffineTransformMakeScale(2.0f,2.0f); 
[path applyTransform:scale];

CGAffineTransform move = CGAffineTransformMakeTranslation(-10, -10);
[path applyTransform:move];

path一个在哪里UIBezierPath

那是对的吗?我使用的值 (-10, 2.0f) 只是示例。

4

2 回答 2

0

我认为解决这个问题的最好方法是将路径转换为 ​​CAShapeLayer 并设置图层的位置和大小。非常简单和优雅。但是,根据实现,您必须解决一些错误。

myCAShapeLayer.path = myUIBezierPath.path;
myCAShapeLayer.position = CGRectMake(x, y);

CALayers 太棒了!

于 2013-05-29T16:36:04.920 回答
0

您正在寻找的是如何将仿射变换应用于贝塞尔路径。当然可以,使用这种方法:

- (void)applyTransform:(CGAffineTransform)transform;

结构是这样定义的:

struct CGAffineTransform {
   CGFloat a;
   CGFloat b;
   CGFloat c;
   CGFloat d;
   CGFloat tx;
   CGFloat ty;
};
typedef struct CGAffineTransform CGAffineTransform;

字段含义:

字段
a
矩阵中位置 [1,1] 处的条目。
b
矩阵中位置 [1,2] 处的条目。
c
矩阵中位置 [2,1] 处的条目。
d
矩阵中位置 [2,2] 处的条目。
tx
矩阵中位置 [3,1] 处的条目。
ty
矩阵中位置 [3,2] 处的条目。

参考:

CGAffineTransform
UIBezierPath

于 2013-05-13T20:18:25.933 回答