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

dcb*_*nji 5 scale uibezierpath swift ios8

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

我已经调查过,CGContextScaleCTM(aRef, <#sx: CGFloat#>, <#sy: CGFloat#>)但我不确定如何将CGRect我的视图转换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))
Run Code Online (Sandbox Code Playgroud)

这样下去了

bezierPath.closePath()
bezierPath.miterLimit = 4
bezierPath.usesEvenOddFillRule = true;
Run Code Online (Sandbox Code Playgroud)

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

Jan*_*ans 8

在代码中,您可以使用此UIBezierPath快速扩展PaintCodeScale根据需要缩放路径.

例如

bezierPath.fit(into: rect).moveCenter(to: rect.center).fill()
Run Code Online (Sandbox Code Playgroud)


dcb*_*nji 6

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

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