将CGPathAddArcToPoint转换为Swift 3语法求助
解决Swift 3中CGPathAddArcToPoint转addArc的问题
嘿,我太懂你升级Swift 3时找不到这个方法转换技巧的郁闷了!当初我转的时候也卡在这里好久,其实这个转换比你想的直接,只是参数包装方式变了而已。
首先,先明确对应关系:原来的CGPathAddArcToPoint在Swift 3里就是Path.addArc(tangent1End:tangent2End:radius:),参数是一一对应的:
- 旧方法里的
x1, y1→ 新方法的tangent1End: CGPoint(x: x1, y: y1) - 旧方法里的
x2, y2→ 新方法的tangent2End: CGPoint(x: x2, y: y2) - 旧方法里的
radius直接对应新方法的radius参数
举个实际代码例子更清楚:
旧版(Swift 2/OC)代码:
// Swift 2 版本 CGPathAddArcToPoint(path, nil, 150, 50, 250, 150, 30)
转换为Swift 3代码:
// Swift 3 版本 path.addArc(tangent1End: CGPoint(x: 150, y: 50), tangent2End: CGPoint(x: 250, y: 150), radius: 30)
还要注意一个关键点:这个方法依赖路径的当前点来计算切线。所以在调用addArc之前,一定要确保路径已经有起始点(比如先调用path.move(to: CGPoint(x: ..., y: ...))),不然画出来的弧可能完全不符合预期——这和旧方法的要求是一致的,只是新手容易忽略这点。
简单说下这个方法的逻辑,帮你理解为什么这么转:它会先从当前路径点画一条直线到tangent1End的方向,然后创建一段圆弧,让这段弧同时与这条直线、以及tangent1End到tangent2End的直线相切,最后把路径连接到弧的终点。和原来的CGPathAddArcToPoint功能完全一致,只是把分散的坐标参数打包成了CGPoint对象。
内容的提问来源于stack exchange,提问作者The Architect
相关产品推荐
相关产品推荐

