首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIBezierPath太多路径=太慢?

UIBezierPath太多路径=太慢?
EN

Stack Overflow用户
提问于 2012-10-12 16:36:51
回答 2查看 1.8K关注 0票数 2

我有一个循环,在这个循环中,我向UIBezierPath中添加了许多(10000+)行。这看起来很好,但是一旦我尝试渲染bezierpath,我的设备就会变得极其缓慢和抖动。这是因为我在路径中添加了太多行吗?

向UIBezierPath添加行-简化:(这看起来很好)

代码语言:javascript
复制
[path moveToPoint:CGPointZero];

   for (int i = 0; i < 10000; i++ ) {      
           [path addLineToPoint:CGPointMake(i, i)];
    }

渲染BeizerPath (由Rob建议)-这似乎很慢。

代码语言:javascript
复制
- (void)drawBezierAnimate:(BOOL)animate
{
    UIBezierPath *bezierPath = path;

    CAShapeLayer *bezier = [[CAShapeLayer alloc] init];

    bezier.path          = bezierPath.CGPath;
    bezier.strokeColor   = [UIColor blueColor].CGColor;
    bezier.fillColor     = [UIColor clearColor].CGColor;
    bezier.lineWidth     = 2.0;
    bezier.strokeStart   = 0.0;
    bezier.strokeEnd     = 1.0;
    [self.layer addSublayer:bezier];

    if (animate)
    {
        CABasicAnimation *animateStrokeEnd = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
        animateStrokeEnd.duration  = 100.0;
        animateStrokeEnd.fromValue = [NSNumber numberWithFloat:0.0f];
        animateStrokeEnd.toValue   = [NSNumber numberWithFloat:1.0f];
        [bezier addAnimation:animateStrokeEnd forKey:@"strokeEndAnimation"];
    }
}

Qs:

1)这是因为我添加的路径太多太快了吗?

2)我想最终绘制许多不同颜色的不同线条,所以我假设我需要创建多个(10000+) UIBezierPaths -这是否也会帮助或大大降低设备的运行速度?

3)我该如何解决这个问题?

提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-12 17:34:47

我不认为有一种方法可以让它运行得足够快。

它可能适用于一次性渲染(到图像缓冲区)。但要有动画效果-不。

文档没有对路径中的点数进行限制,但是有成千上万的点数,我认为你已经超出了任何合理的限制。

OpenGL在这里可能很有用-也许有人可以插话并给出一些建议。

单独使用UIKit时,您可能必须从多个缓存层合成图像。

票数 2
EN

Stack Overflow用户

发布于 2013-09-13 10:57:31

我发现由于抗锯齿,UIBezierPath速度很慢。我的解决方案是在各种拖动操作期间关闭抗锯齿,并在手势完成后重新绘制并启用抗锯齿功能。

您可以使用CGContextSetShouldAntialias(context,...)来完成此操作;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12855212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档