【问题标题】:iOS: Why the UIBezierPath need long time to drawing?iOS:为什么 UIBezierPath 需要很长时间才能绘制?
【发布时间】:2015-12-10 07:01:21
【问题描述】:

我更改了问题的详细信息,因为我没有足够的声誉来获得更多链接,谢谢理解。

我使用 UIBezierPath 绘制矩形/线条,但绘制速度很慢。

  1. 它在设备上运行(iPhone5、iOS 9.2;iPhone5C、iOS8.4);
  2. 运行时间大概30s左右,我在instruments里的Time Profiler里看了,都被UIBezierPath的stroke方法挡住了; 下面是来自方法 [- (void)drawSeriesBar:(CGRect)rect cellData:(CerKlineItem *)data]:

另一种方法:

有谁知道为什么 UIBezierPath 会花费很长时间?以及如何解决?感谢您的热心帮助!

在此处输入代码:

//draw line
UIBezierPath * path = [UIBezierPath bezierPath];
[color setStroke];

CGFloat highHeight = heightForPrice(data.high,rect);
CGPoint highPoint = CGPointMake(CGRectGetMinX(rect) + CGRectGetWidth(rect) / 2 , CGRectGetMinY(rect) + highHeight);
[path moveToPoint:highPoint];

CGFloat lowHeight = heightForPrice(data.low,rect);
CGPoint lowPoint = CGPointMake(CGRectGetMinX(rect) + CGRectGetWidth(rect) / 2 , CGRectGetMinY(rect) + lowHeight);
[path addLineToPoint:lowPoint];

[path setLineWidth:1];
[path stroke];

【问题讨论】:

  • 我知道这是题外话,但你是如何在 Xcode 中为每种方法启用百分比使用的?谢谢:)
  • @Fengson 这就是你在仪器的时间分析器中得到的东西
  • @Fengson Jrturton 说的是实话
  • 您如何确定您的代码运行缓慢 - 您是否看到性能问题?在设备上还是在模拟器上?这幅画什么时候完成,多久完成一次?我之所以这样问,是因为如果你只计算这些百分比,那你就是在浪费时间——这些数字加起来必须达到 100%,而实际的绘图部分总是会占用大部分时间。
  • @jrturton 谢谢你的提问,我尝试在我的问题中添加更多信息但失败了,所以在这里添加它们:1.它在设备上运行(iPhone5,iOS 9.2;iPhone5C,iOS8 .4); 2.运行时间大概30s左右,我在instruments里的Time Profiler里看了,都被UIBezierPath的stroke方法挡住了;

标签: ios iphone uibezierpath graphic


【解决方案1】:

您的两个版本远非等价:

  • 第一个包含:move, line, move, line, line, line,因为在添加第二部分之前您没有清除路径。此外,绘图代码不知道它是一个矩形,它使用通用多边形填充代码

  • 第二个只是填充一个矩形

您可以尝试将第一个路径替换为使用bezierPathWithRect: 创建的新路径。

【讨论】:

  • 对不起,我想知道为什么 UIBezierPath 绘制缓慢。可以看到上面红色矩形的代码如图所示,UIBezierPath是一个新的路径,但是仍然花费了很长时间。
  • 不,这不是一条新路径,您正在重用您用来在上面画一条线的相同路径。此外,您正在比较填充多边形和填充矩形。苹果和橙子。
  • 是的,我的意思是为什么 UIBezierPath 画线很慢?
猜你喜欢
  • 2019-09-15
  • 2020-11-08
  • 2013-02-06
  • 1970-01-01
相关资源
最近更新 更多