2013-05-13 108 views
0

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

有没有什么办法可以将UIBezierPath缩放到一个特定的尺寸,并将它翻译(移动)到一个可以适用于大多数形状的特定位置?也许有一种方法可以设置形状的大小和位置,而无需使用我不知道的转换?我绘制的形状在尺寸上都非常不同,有些边缘锯齿状。

这是我到目前为止与我的AffineTransformations做的。

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

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

pathUIBezierPath

这是正确的吗?我使用的值(-10,2.0f)仅仅是示例。

回答

0

我认为解决这个问题的最好办法是将路径转换成CAShapeLayer并设置图层的位置和大小。非常简单和优雅。但是,根据实施情况,您将需要解决一些错误。

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

CALayers太棒了!

0

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

- (void)applyTransform:(CGAffineTransform)transform; 

这是怎么了结构定义:

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

和字段含义:



入口位置[1,1]在矩阵中。
b
矩阵中[1,2]位置的条目。
c
矩阵中位置[2,1]处的条目。
d
矩阵中位置为[2,2]的条目。
tx
矩阵中位置[3,1]处的条目。
ty
矩阵中位置[3,2]处的条目。

参考:

CGAffineTransform
UIBezierPath

+0

我在原文中提到我目前正在使用AffineTransformations,并且他们工作得不好。如果你相信这是我应该做的,你能否提供一个更好的解释,我应该如何应用这个转变? – tentmaking 2013-05-13 22:30:25

+0

请注意,您在回答您的问题后添加了代码。该代码应该是正确的,那么如果它不起作用,你在另一部分代码中做错了。如果仍然存在一些不需要的行为,请显示完整的代码。 – 2013-05-14 11:53:27

+0

我在回答问题后添加了代码,但我最初提到我使用CGAffineTransformations。无论哪种方式,我找到了一个解决方案,并会尽快发布。 – tentmaking 2013-05-14 21:46:38