Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone CGC上下文优化_Iphone_Objective C_Quartz Graphics - Fatal编程技术网

Iphone CGC上下文优化

Iphone CGC上下文优化,iphone,objective-c,quartz-graphics,Iphone,Objective C,Quartz Graphics,我的跑步速度有点问题。在加载时,我生成一个至少包含1000个点的CGMutablePath。我想在屏幕上滚动此路径,因此我使用以下代码: -(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 playb

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

-(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像素宽),还是仅绘制屏幕上可见的部分?我可以做些什么来优化它呢?

如果可能的话,每秒绘制1000点或10000点路径60次确实会降低应用程序的速度。如果路径是静态的,那么实际上应该只在UIView中绘制一次,以便将其缓存在UIView的层中,并对周围的层设置动画。如果需要设置动画,您可以查看新的CAShapeLayer,它提供了只需将动画应用于其路径属性即可设置Bezier路径动画的功能


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

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

路径的点坐标是静态的,但我需要根据比例因子沿x轴滚动路径。如果我在生成后立即在层上绘制形状,然后进行缩放,我会有很多模糊(顺便说一下,最大比例因子约为1000)。如果我在绘制到图层之前缩放路径,我只能绘制s.width值的像素。创建这样大小的图层不会给我带来很多改进:/我要检查CAShapeLayer,我还没有听说过它。我的最后一个赌注是尝试使用openGL,但有这么多多边形,我不确定它是否真的有用。我很高兴你找到了它,但是值得注意的是,你可以用CG做很多事情来优化它,使其工作得同样好,甚至可能更好。