如何缩放UIBezierPath以适合当前视图(在Swift中)

时间:2014-08-24 05:48:45

标签: swift scale ios8 uibezierpath

我创建了一个使用从PaintCode导入的代码绘制咖啡杯的类,并将此类应用于视图。使用@IBDesignable,我可以在我的故事板中看到杯子正在视图中绘制,但整体形状太大了。我可以在代码中重新绘制形状,使其适合视图的当前大小,但是在绘制后没有办法缩放形状,以便当我的视图在不同设备上更改大小时,形状是否正确缩放? / p>

我查看了CGContextScaleCTM(aRef, <#sx: CGFloat#>, <#sy: CGFloat#>),但我不确定如何将我的观点CGRect的{​​{1}}转换为正确的比例因子

我不想发布所有内容,但我的绘图代码就是这样开始的

bounds

然后

bezierPath.moveToPoint(CGPointMake(64.8, 52.81))
bezierPath.addCurveToPoint(CGPointMake(58.89, 43.44), controlPoint1: CGPointMake(64.21, 48.28), controlPoint2: CGPointMake(62.11, 44.95))
bezierPath.addCurveToPoint(CGPointMake(56.82, 42.76), controlPoint1: CGPointMake(58.24, 43.13), controlPoint2: CGPointMake(57.55, 42.9))

然后还有另外两个绘图代码块,用于绘制咖啡蒸汽的两条小线。我将这两个路径附加到原始bezierPath.closePath() bezierPath.miterLimit = 4 bezierPath.usesEvenOddFillRule = true; ,然后设置填充颜色并填充整个形状。

2 个答案:

答案 0 :(得分:7)

在代码中,您可以使用此UIBezierPath swift扩展PaintCodeScale随意扩展路径。

e.g

bezierPath.fit(into: rect).moveCenter(to: rect.center).fill()

答案 1 :(得分:6)

由于我使用PaintCode生成绘图代码,因此我找到了一种方法,可以使用应用程序的帮助来实现@ dasdom的建议。

在PaintCode中有一个&#34;框架&#34;您可以在绘图周围放置的工具。这样可以对图稿进行约束,以便相对于框架大小重新绘制矢量。框架是一个变量,当您将其带入Xcode时,它会与您的代码一起导出。当我在Xcode中将绘图代码添加到我的类中,然后将类添加到Storyboard中的视图时,Xcode会自动将框架缩放到视图大小,因此我的类中的绘图代码也会自动调整大小以适合我的视图。现在,艺术作品将自动重新绘制,以适应我添加课程的任何视图。由于&#34;自动调整子视图&#34;可能会发生自动重新调整大小。在Storyboard中为我已应用图形类的视图启用的选项。