首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CGContext优化

CGContext优化
EN

Stack Overflow用户
提问于 2009-07-30 08:59:03
回答 2查看 2.2K关注 0票数 1

我有一个小小的跑步速度问题。在加载时,我生成一个至少包含1000个点的CGMutablePath。我想在屏幕上滚动这个路径,所以我使用这样的代码:

代码语言:javascript
复制
-(void) drawRect:(CGRect)rect {

    /*
    Here, I have a timer calling drawRect 60 times per second.
    There's also code for the scale and currentTime, based on
    an MP3 playback (AVAudioPlayer);
    */

    CGContextRef ref = UIGraphicsGetCurrentContext();   
    CGContextClearRect(ref, [self frame]);

    CGContextSaveGState(ref);
    CGContextTranslateCTM(ref, s.width/2+currentTime, 1);
    CGContextScaleCTM(ref, scale, 1);
    CGContextAddPath(ref, myGraphPath);
    CGContextSetRGBFillColor(ref, .1, .1, .1, .8);
    CGContextFillPath(ref);
    CGContextRestoreGState(ref);
}

问题是它有点慢,不是很慢,但因为我需要添加更多的图形代码……我想知道设备是绘制整个路径(一旦应用了比例,路径大约是10.000像素宽),还是只绘制屏幕上可见的部分?我能做些什么来优化它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-04 19:42:07

在尝试了很多东西之后(比如将我巨大的1000点路径分成更小的10点路径等等),我已经使用简单的顶点数组将所有的东西都移植到了openGL。我花了大约4个小时来移植所有东西(甚至缩放路径,滚动它,等等)现在,我得到了一个完整的60fps动画,当我使用CoreGraphics时平均只有22fps,峰值是28。

票数 1
EN

Stack Overflow用户

发布于 2009-07-30 12:09:39

如果可能的话,每秒绘制1000点或10000点路径60次真的会减慢应用程序的速度。如果路径是静态的,你真的应该只在你的UIView中绘制一次,这样它就被缓存在UIView的层中,并在周围的层中设置动画。如果需要设置动画,您可以查看新的CAShapeLayer,它提供了只需将动画应用于路径属性即可为Bezier路径设置动画的功能。

但是,10,000像素将比iPhone上的最大纹理大小(2048 X 2048)更宽,因此在任何标准视图或层中显示它都会出现问题,可能需要将其拆分成更小的块或使用CATiledLayer将其渲染到屏幕上。

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

https://stackoverflow.com/questions/1205345

复制
相关文章

相似问题

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