通过PaintCode将生成的代码形状转换为动态形状大小 [英] Translate generated code shape by PaintCode to dynamic shape size

查看:65
本文介绍了通过PaintCode将生成的代码形状转换为动态形状大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用UIBezietPath绘制形状,但是每次遇到曲线"时都会遇到麻烦.为了解决我的问题,我确实使用了Paint Code,代码生成得很好,但是它是静态形状,因此我尝试将此代码转换为动态屏幕尺寸,但是每次遇到一半形状时都会遇到麻烦.

I am try draw shape using UIBezietPath but each time I am have trouble with "Curve". For solving my problem I did use Paint Code, code was be generated well, but it is a static shape , and I try translate this code for dynamic screen size, but each time I have trouble with half of shape.

有人可以帮助我正确翻译此代码吗?

Can anyone help me translate this code correctly?

通过绘画代码生成的代码:

Generated code by Paint Code:

//// Color Declarations
let fillColor = NSColor(red: 0.118, green: 0.118, blue: 0.149, alpha: 1)

//// Bezier Drawing
let bezierPath = NSBezierPath()
bezierPath.move(to: NSPoint(x: 8.83, y: 89))
bezierPath.line(to: NSPoint(x: 154.29, y: 89))
bezierPath.curve(to: NSPoint(x: 163.01, y: 81.04), controlPoint1: NSPoint(x: 158.71, y: 89), controlPoint2: NSPoint(x: 162.21, y: 85.39))
bezierPath.curve(to: NSPoint(x: 206.45, y: 45.05), controlPoint1: NSPoint(x: 166.77, y: 60.57), controlPoint2: NSPoint(x: 184.79, y: 45.05))
bezierPath.curve(to: NSPoint(x: 249.89, y: 81.04), controlPoint1: NSPoint(x: 228.11, y: 45.05), controlPoint2: NSPoint(x: 246.12, y: 60.57))
bezierPath.curve(to: NSPoint(x: 258.61, y: 89), controlPoint1: NSPoint(x: 250.68, y: 85.39), controlPoint2: NSPoint(x: 254.19, y: 89))
bezierPath.line(to: NSPoint(x: 405.17, y: 89))
bezierPath.curve(to: NSPoint(x: 414, y: 80.21), controlPoint1: NSPoint(x: 410.05, y: 89), controlPoint2: NSPoint(x: 414, y: 85.06))
bezierPath.line(to: NSPoint(x: 414, y: 8.79))
bezierPath.curve(to: NSPoint(x: 405.17, y: 0), controlPoint1: NSPoint(x: 414, y: 3.94), controlPoint2: NSPoint(x: 410.05, y: 0))
bezierPath.line(to: NSPoint(x: 8.83, y: 0))
bezierPath.curve(to: NSPoint(x: 0, y: 8.79), controlPoint1: NSPoint(x: 3.95, y: 0), controlPoint2: NSPoint(x: 0, y: 3.94))
bezierPath.line(to: NSPoint(x: 0, y: 80.21))
bezierPath.curve(to: NSPoint(x: 8.83, y: 89), controlPoint1: NSPoint(x: 0, y: 85.06), controlPoint2: NSPoint(x: 3.95, y: 89))
bezierPath.close()
fillColor.setFill()
bezierPath.fill()

形状:

推荐答案

首先扩展 CGPoint 并创建一个 scaled(by:)方法:

First extend CGPoint and create a scaled(by:) method:

extension CGPoint {
    func scaled(by value: CGFloat) -> CGPoint { applying(.init(scaleX: value, y: value)) }
}

然后获取实际超级视图的 bounds 宽度,然后除以路径的宽度 414 .

Then get the actual superview's bounds width and divide by the width of your path 414.

let value: CGFloat = superview!.bounds.size.width / 414

现在,您只需要将比例值应用于路径的每个点:

Now you just need to apply the scale value to every point of your path:

bezierPath.move(to: NSPoint(x: 8.83, y: 89).scaled(by: value))

这篇关于通过PaintCode将生成的代码形状转换为动态形状大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆