swift - 将 PaintCode 生成的代码形状转换为动态形状大小
问题描述
我尝试使用 UIBezietPath 绘制形状,但每次我都遇到“曲线”问题。为了解决我的问题,我确实使用了 Paint Code,代码生成得很好,但它是一个静态形状,我尝试将此代码转换为动态屏幕尺寸,但每次我都遇到一半形状的问题。
谁能帮我正确翻译这段代码?
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:)
方法:
extension CGPoint {
func scaled(by value: CGFloat) -> CGPoint { applying(.init(scaleX: value, y: value)) }
}
然后获取实际超级视图的bounds
宽度并除以路径的宽度414
。
let value: CGFloat = superview!.bounds.size.width / 414
现在您只需要将比例值应用于路径的每个点:
bezierPath.move(to: NSPoint(x: 8.83, y: 89).scaled(by: value))
推荐阅读
- javascript - 如何获得背景颜色和颜色不同的字符串?
- css - 如何缩短bulma输入?
- gcloud - G Suite 的 G 云 MX 记录中的首选项和邮件服务器无效记录数据
- angular - Angular 中的 Vue.prototype 等价物是什么?
- rust - 重载引用和值调用
- java - 使用带有嵌套静态类的类的好习惯,然后用更多静态方法扩展包私有抽象类以保持组织?
- google-sheets - 谷歌表格中的第 2 页是否有自动输入建议列表,只输入 1 或 2 个字符?
- r - 如何提高循环操作的性能
- jax-rs - TomEE JAX-RS java.lang.NoSuchMethodError javax.ws.rs.core.Link.fromUri
- python - SQL Server python机器学习无法访问文件系统