不幸的是,在iOS 6.x和早期版本的iOS 7 SDK中,特别是使用复杂的bezierPathByReversingPath
颠倒Bezier路径的方法已经被打破了。新的解决方案取决于将每个路径分解为子路径(参见清单5-8;每个子路径都以移动操作开始,可能不会以关闭操作结束),然后再分解成组件元素(参见清单5-2)。
一般来说,当您将动画或绘图效果应用于路径表示而不是仅填充或对它描边时,您会想要使用反转路径。例如,如果您使用Bezier路径沿路径布置文本,则颠倒顺序可以更改绘图进程的方式。
翻转路径变得比你想象的有点棘手。这是因为当你颠倒项目,你必须考虑临近点。这意味着反向路径通常看起来像这样:
- 移动到倒数第二个元素(在close命令之前的那个)的目标点。
- 向路径的第一个元素添加一直线。
- 反转每个直线和曲线,使用每个项目的目标点作为起点,将起始元素作为目标。
- 如果在原始路径中有一个关闭命令,应用该关闭命令以避免奇怪的线帽伪影。
清单5-14显示了冗长的解决方案。它由两种方法组成。公共反转方法将路径分解为子路径,反转这些子路径的顺序。然后它调用私有reverseSubpath:
方法,它会翻转每个单独的子路径。
清单5-14创建一个反转的Bezier路径
1 | - (UIBezierPath *) reverseSubpath: (UIBezierPath *) subpath |
本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。