为什么长时间绘图后我的绘图会滞后?

用户名

我正在创建一个绘图应用程序。一开始我的画很流畅。当我长时间绘制一堆圆圈时,我的绘图开始变得前卫。也许这是数组不能处理太多点的事实吗?

DV.swift:

   override func touchesBegan(touches: Set<UITouch>, withEvent       event: UIEvent?) {
    lastPoint = touches.first!.locationInView(self)

    self.setNeedsDisplay()
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    var newPoint = touches.first!.locationInView(self)

    lines.append(Line(start: lastPoint, end: newPoint))

    lastPoint = newPoint

    self.setNeedsDisplay()

}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
    var veryFirstPoint = touches.first!.locationInView(self)
    lines.append(Line(start: lastPoint, end:veryFirstPoint))
    self.setNeedsDisplay()
}


override func drawRect(rect: CGRect) {
    var context = UIGraphicsGetCurrentContext()
    CGContextBeginPath(context)

    for line in lines {

        CGContextMoveToPoint(context,line.start.x , line.start.y)
        CGContextAddLineToPoint(context, line.end.x, line.end.y)


    }
    CGContextSetRGBFillColor(context, 0, 0, 0, 1)

    CGContextSetLineWidth(context, 5)
    CGContextStrokePath(context)
    }

在我的iPad mini 4上测试的示例:左侧是绘制了一堆循环后的锯齿状数字。右边是我画的前几个数字,它们很平滑。

在此处输入图片说明

贝尤武夫

你说的对。每次添加新的“行”时(即每次触摸后),CPU都会重绘许多路径。您拥有的行数越多,处理器的处理量就会越来越大。一种解决方案是仅重绘视图的“脏”部分。您可以使用setNeedsDisplayInRect(rect:CGRect)代替来做到这一点setNeedsDisplay()例如,您可以添加扩展名:

extension CGRect{
    static func rectWithTwoPoints(p1:CGPoint,p2:CGPoint) -> CGRect
    {
        return CGRectMake(min(p1.x, p2.x),min(p1.y, p2.y),fabs(p1.x - p2.x),fabs(p1.y - p2.y));
    }
}

这将给我一个包含任何两点的信息。现在在您中touchesMoved:touchesEnded:我们可以这样打电话setNeedsDisplayInRect:

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let newPoint = touches.first!.locationInView(self)

        lines.append(Line(start: lastPoint, end: newPoint))

        lastPoint = newPoint

        self.setNeedsDisplayInRect(CGRectInset(CGRect.rectWithTwoPoints((lines.last?.start)!, p2: (lines.last?.end)!),-10.0,-10.0)) //would be better to not force unwrap and use magic numbers, but you get the idea
    }

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let veryFirstPoint = touches.first!.locationInView(self)
        lines.append(Line(start: lastPoint, end:veryFirstPoint))
        self.setNeedsDisplayInRect(CGRectInset(CGRect.rectWithTwoPoints((lines.last?.start)!, p2: (lines.last?.end)!),-10.0,-10.0))
    }

使用CGRectInset扩展我们的rect有点,因为我们有一个路径宽度,如果我们仅重绘rectWithTwoPoints返回的rect,则会考虑在内。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么长时间绘图后我的绘图会滞后?

来自分类Dev

为什么选项卡式绘图会删除我的标题和标签?

来自分类Dev

一段时间后实时数据绘图滞后

来自分类Dev

为什么在更新绘图时Jupyter Notebook会创建重复的绘图

来自分类Dev

JavaFX-为什么LineChart在几次绘图后重复颜色?

来自分类Dev

为什么在我使用G1GC时Scan RS会花费很长时间

来自分类Dev

为什么我的UIGraphicsImageRenderer绘图(iOS 10)没有显示?

来自分类Dev

为什么ggplot将我的绘图变成列表

来自分类Dev

为什么我的绘图代码不断产生模糊的形状?

来自分类Dev

为什么在Android画布上绘图不会修改我的位图?

来自分类Dev

为什么我的UIGraphicsImageRenderer绘图(iOS 10)没有显示?

来自分类Dev

为什么我的绘图值不正确?

来自分类Dev

长时间休眠后,为什么重新启动系统?

来自分类Dev

如果长时间在后台运行,为什么我的phonegap应用程序会重新启动

来自分类Dev

为什么长时间运行的控制器代码会阻止我对web.api的请求?

来自分类Dev

为什么我的程序需要这么长时间才能运行?

来自分类Dev

为什么我的Google BigQuery查询花了这么长时间?

来自分类Dev

为什么我发布的提要长时间无法使用?

来自分类Dev

为什么我的in.ready()需要这么长时间?

来自分类Dev

为什么我的程序需要这么长时间才能运行?

来自分类Dev

为什么我的桌子要花这么长时间才能装载

来自分类Dev

为什么我的电脑需要很长时间才能关机?

来自分类Dev

为什么我的 MySQL 搜索需要这么长时间?

来自分类Dev

为什么我的 javascript 需要很长时间才能运行?

来自分类Dev

为什么gnuplot绘图不绘制直线?

来自分类Dev

为什么这个 Matlab 代码的绘图是空的?

来自分类Dev

分析:为什么查询时间可能会花费这么长时间,而且成本似乎很低?

来自分类Dev

如果将计时器用于受控时间滞后,为什么Excel中的VBA会变慢?

来自分类Dev

在for循环中绘图:为什么我不能从计数器中减去?

Related 相关文章

  1. 1

    为什么长时间绘图后我的绘图会滞后?

  2. 2

    为什么选项卡式绘图会删除我的标题和标签?

  3. 3

    一段时间后实时数据绘图滞后

  4. 4

    为什么在更新绘图时Jupyter Notebook会创建重复的绘图

  5. 5

    JavaFX-为什么LineChart在几次绘图后重复颜色?

  6. 6

    为什么在我使用G1GC时Scan RS会花费很长时间

  7. 7

    为什么我的UIGraphicsImageRenderer绘图(iOS 10)没有显示?

  8. 8

    为什么ggplot将我的绘图变成列表

  9. 9

    为什么我的绘图代码不断产生模糊的形状?

  10. 10

    为什么在Android画布上绘图不会修改我的位图?

  11. 11

    为什么我的UIGraphicsImageRenderer绘图(iOS 10)没有显示?

  12. 12

    为什么我的绘图值不正确?

  13. 13

    长时间休眠后,为什么重新启动系统?

  14. 14

    如果长时间在后台运行,为什么我的phonegap应用程序会重新启动

  15. 15

    为什么长时间运行的控制器代码会阻止我对web.api的请求?

  16. 16

    为什么我的程序需要这么长时间才能运行?

  17. 17

    为什么我的Google BigQuery查询花了这么长时间?

  18. 18

    为什么我发布的提要长时间无法使用?

  19. 19

    为什么我的in.ready()需要这么长时间?

  20. 20

    为什么我的程序需要这么长时间才能运行?

  21. 21

    为什么我的桌子要花这么长时间才能装载

  22. 22

    为什么我的电脑需要很长时间才能关机?

  23. 23

    为什么我的 MySQL 搜索需要这么长时间?

  24. 24

    为什么我的 javascript 需要很长时间才能运行?

  25. 25

    为什么gnuplot绘图不绘制直线?

  26. 26

    为什么这个 Matlab 代码的绘图是空的?

  27. 27

    分析:为什么查询时间可能会花费这么长时间,而且成本似乎很低?

  28. 28

    如果将计时器用于受控时间滞后,为什么Excel中的VBA会变慢?

  29. 29

    在for循环中绘图:为什么我不能从计数器中减去?

热门标签

归档