【发布时间】:2017-11-03 14:51:54
【问题描述】:
我需要缩放路径,但应该使用更大的、封闭的、任意矩形来执行转换,而不是使用路径的边界。 (即“画布”。)
我的问题是如何在不绘制画布的情况下做到这一点。
例如,在下图中:
蓝色方块表示路径的原始矩形(在本例中为火箭)。
紫色矩形表示“画布”或父坐标系的边界。
紫色矩形仅用于定位;不被绘制。空格同样会被忽略。
我需要缩放画布,并保留转换后的火箭路径(用于剪辑操作、缓存等)。即我需要在转换后丢失紫色矩形。
理想情况下,我会使用类似以下小说的内容:
var canvasPath = UIBezierPath(rect: canvasRect)
canvasPath.append(rocketPath, withName: "rocket")
canvasPath.doSomeTransformOrOther()
let transformedRocketPath = canvasPath.path(forName: "rocket")
遗憾的是,即使 UIBezierPath 或 CGPath 像这样处理子路径,神奇的 append(:withName:) 和 path(forName:) 方法也不存在。唉!
另一种方法是临时向路径添加点,每个画布角一个。然后,变换路径。然后,使用 CGPath 的(丑陋的)apply(info:function:) 方法走路径,在没有画布点的情况下重建路径,然后绘制结果。 (是的,把伏特加递过去。)
谁能提供更理智的解决方案?感谢您的帮助我
(对于那些感兴趣的人:这与如何将不规则形状的路径居中的问题有关。紫色矩形表示最小包围圆的边界。用 MEC 的坐标系绘制火箭将使火箭看起来更直观居中,与使用 boundingBox 相比。)
【问题讨论】:
标签: ios core-graphics uibezierpath cgpath