gpt4 book ai didi

ios - 路径变换后是否可以获取UIBezierPath当前控制点?

转载 作者:行者123 更新时间:2023-11-29 00:27:21 25 4
gpt4 key购买 nike

我正在努力为用户创建一种在屏幕上移动多边形并通过拖动其角顶点来更改其形状的方法。然后我需要能够在其他设备上重新绘制那些修改后的多边形 - 所以我需要能够获得屏幕上所有多边形的所有顶点的最终位置。

这是我目前正在做的:

我在 drawRect 函数的覆盖中为每个形状使用 UIBezierPath 绘制多边形。然后,我允许用户通过应用 CGAffineTransformMakeTranslation 函数和 touchedMoved 中的 xy 坐标增量将它们拖到屏幕上> 功能覆盖。我有从中绘制初始多边形的初始控制点(如 here 所述)。但是一旦路径实例在屏幕上移动,这些值就不会改变 - 所以我只能获得初始值。

Core Graphics 框架中是否有内置的东西可以让我在 UIBezierPath 实例中获取一组当前控制点?我试图避免手动跟踪这些点。我会考虑使用其他方式来绘制如果:

  • 有一种内置的方法来检测一个点是否位于该多边形内(例如 UIBezierPath#contains 方法
  • 一种轻松引入约束的方法,使用户无法将多边形移出父 View 的边界(我需要整个多边形可见)
  • 一种在用户完成后轻松获取所有分数的方法
  • 一切都可以在 iPhone 5 上以低于 60fps 的速度运行。

感谢您的宝贵时间!

最佳答案

由于您仅将变换应用于 View /图层,因此要从路径获取变换后的控制点,只需将相同的变换应用于路径,然后获取控制点。像这样的东西:

UIBezierPath* copiedPath = [myPath copy];
[copiedPath applyTransform:[view transform]];
[self yourExistingMethodToFetchPointsFromPath:copiedPath];

不幸的是,当前从路径中提取点的方式是唯一可用于从输入 UIBezierPath 重新获取点的 API。但是 - 您可能对我编写的一个库感兴趣,该库使使用贝塞尔曲线路径变得更加简单:PerformanceBezier .这个库使得从路径中获取点变得容易得多:

for(NSInteger i=0;i<[path elementCount];i++){
CGPathElement element = [path elementAtIndex:n];
// now you know the element.type and the element.points
}

除了添加功能以使路径更易于使用之外,它还在现有 API 之上添加了一个缓存层,以大大减少使用路径时的性能损失。根据您在 UIBezierPath 方法上花费的 CPU 时间,此库将做出重大改进。我看到了between 2x and 10x improvement ,取决于我使用的操作。

关于ios - 路径变换后是否可以获取UIBezierPath当前控制点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42681979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com