Ios 大的UIBezierPath,渲染速度慢
对于我正在创建的应用程序,我使用Ios 大的UIBezierPath,渲染速度慢,ios,cocoa-touch,graphics,core-graphics,uibezierpath,Ios,Cocoa Touch,Graphics,Core Graphics,Uibezierpath,对于我正在创建的应用程序,我使用UIBezierPath来存储路径。问题是,这条路径的长度不断增加,在某一点上,应用程序会滞后并变得不稳定。因为路径的长度不断增加,所以我每秒不断地重画视图100次(如果有更好的方法,请告诉我)。在某一点上,应用程序会变得非常不稳定。我认为这是因为划过这条路太长了 您可以在mydrawRect方法中看到图形被转换。屏幕上显示的路径很少,因此是否有办法只划过路径可见的部分?这就是我用CGContextClip方法所做的,但没有明显的改进 - (void)drawRe
UIBezierPath
来存储路径。问题是,这条路径的长度不断增加,在某一点上,应用程序会滞后并变得不稳定。因为路径的长度不断增加,所以我每秒不断地重画视图100次(如果有更好的方法,请告诉我)。在某一点上,应用程序会变得非常不稳定。我认为这是因为划过这条路太长了
您可以在mydrawRect
方法中看到图形被转换。屏幕上显示的路径很少,因此是否有办法只划过路径可见的部分?这就是我用CGContextClip
方法所做的,但没有明显的改进
- (void)drawRect:(CGRect)rect {
CGContextRef myContext = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(myContext, 0, yTranslation);
[[UIColor whiteColor] setStroke];
[bPath addLineToPoint:currentPoint];
[bPath setLineWidth:lineWidth];
CGContextClip(myContext);
[bPath stroke];
}
谢谢。缓存是一种可能的解决方案:在内存中具有透明背景的图像上绘制一次曲线。仅当曲线更改时更新此图像。将此缓存图像覆盖到正在绘制的任何对象上。它的处理能力应该更便宜 另一种可能性是,在确定哪些点会影响当前视图后,从贝塞尔曲线中删除不需要的点,然后渲染生成的贝塞尔曲线。一些想法:
touchesMoved
或使用UIGestureStateChanged调用手势识别器),才应添加数据点。这减少了bezier中的点数,并延迟了性能问题强加给您的时间点。该过程应由触摸事件驱动,而不是计时器
CGRectContainsPoint
)来加快速度。您可能应该检查线段与CGRect
的交点(因为理论上,起点和终点都不可能位于可见矩形内,但它们之间的线段可能与矩形相交)
您还可以设计此过程,以便它确定哪些线段仅在视图端口移动时可见。这可以避免您需要不断地迭代一个非常大的数组
是的,但是曲线在不断变化。这仍然有用吗?我想我不太明白。我的图形知识是有限的它每秒改变100次吗?是的,但我可以改变,有没有办法只画路径的可见部分?你是说曲线的长度每秒增加100次,而你是每秒重画100次?在这种情况下,您需要确定哪些控制曲线路径的点对当前视图没有影响,并在绘制之前先将其删除。@Rob是的,该线与用户的点击有关。我有一个计时方法,每10毫秒调用一次,以刷新屏幕并根据用户最后一次点击进行调整。但无论如何,这条路从来都不是一成不变的。另外,我只是添加点,整个曲线没有变化。谢谢。@Rob应用程序的性质要求添加这些数据点。我确实将更新从10毫秒更改为40毫秒,并且有了显著的改进。然而,我的理想方案是缩短屏幕上可见的路径。