使用Performance绘制许多行

时间:2013-04-10 20:36:04

标签: ios drawing

嘿,我需要一个构建应用程序的帮助。我构建了一个艺术应用程序,这个应用程序正在使用干扰。这就是我需要在这个应用程序中绘制许多行的原因。更多的线路更适合干扰。我认为问题是iPad无法处理太多线路,因为速度或性能太慢。 我不知道如何加速我的代码以在iPad上获得更多性能。我应该使用Open GL还是别的......

我该怎么办?

以下是Draw.m

#import "Draw.h"

@implementation Draw


- (IBAction) sliderValueChanged:(UISlider *)sender {
    label.text = [NSString stringWithFormat:@"%f", slider.value];
    //NSLog(@"slider value = %f", sender.value);
    [self setNeedsDisplay];
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

    }
    return self;
}




- (void)drawRect:(CGRect)rect
{

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    //NSLog(@"slider value = %f", self.bounds.size.width);

    CGMutablePathRef cgpath = CGPathCreateMutable();
    CGPathMoveToPoint(cgpath, NULL, 0, 500);


    CGMutablePathRef cgpath2 = CGPathCreateMutable();
    CGPathMoveToPoint(cgpath2, NULL, 0, 500);

    UIBezierPath *uipath = [[UIBezierPath alloc] init];
    [uipath moveToPoint:CGPointMake(0, 0)];

    int step = 5;
    int iterations = self.bounds.size.width/step;

    for (int i = 0; i < iterations+1; i++){
    //CGPathAddCurveToPoint(cgpath, NULL, 1+i, 0, 1+i, 0, 1+i ,0);

        CGPathAddLineToPoint ( cgpath,  NULL, 0, 0 );
        CGPathAddLineToPoint ( cgpath,  NULL, 0, 768 );
        CGPathAddLineToPoint ( cgpath,  NULL, step*i-slider.value*2, 768 );
        CGPathAddLineToPoint ( cgpath,  NULL, step*i, 0 );
        CGPathAddLineToPoint ( cgpath,  NULL, (step*i)+step, 0 );

    [[UIColor blackColor] setStroke];
    CGContextAddPath(ctx, cgpath);

    [self strokeUIBezierPath:uipath];

    CGPathRelease(cgpath);
}

- (void)strokeContext:(CGContextRef)context
{
    CGContextStrokePath(context);
}

- (void)strokeUIBezierPath:(UIBezierPath*)path
{
    [path stroke];
}

@end

image http://img17.imageshack.us/img17/375/53178410200339197475308.jpg

2 个答案:

答案 0 :(得分:1)

bezier路径的问题是,它们可能非常“计算重量”。

您可以使用直线(CGContextAddLineToPoint(context, point.x, point.y);

或者您使用图形加速。 你可以直接潜入OpenGL,也可以使用游戏引擎来帮助你处理一些代码。

最受欢迎的一个(我觉得很容易使用)是cocos2d。

答案 1 :(得分:0)

使用模式填充屏幕应该可以获得更好的性能。整个部分包含the Quartz Programming Guide中的示例代码。

在您的情况下,您可以创建一个非常小的图案单元格(高度= 1),最左边只有一个黑色像素,后跟与下一行距离相同的白色像素数。