Drawrect с CGBitmapContext работает слишком медленно

Итак, у меня есть базовое приложение для рисования, которое позволяет мне рисовать линии. Я рисую внеэкранное растровое изображение, а затем представляю изображение в drawRect. Он работает, но слишком медленно, обновляясь примерно через полсекунды после того, как вы нарисовали его пальцем. Я взял код и адаптировал его из этого туториала http://www.youtube.com/watch?v=UfWeMIL-Nu8&feature=relmfu., как вы можете видеть в комментариях, люди также говорят, что это слишком медленно, но парень не ответил.

Итак, как я могу ускорить его? или есть лучший способ сделать это? любые указатели будут оценены.

Вот код в моем DrawView.m.

-(id)initWithCoder:(NSCoder *)aDecoder {
     if ((self=[super initWithCoder:aDecoder])) {
         [self setUpBuffer];
     }

     return self;
}

-(void)setUpBuffer {
     CGContextRelease(offscreenBuffer);

     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

     offscreenBuffer = CGBitmapContextCreate(NULL, self.bounds.size.width, self.bounds.size.height, 8, self.bounds.size.width*4, colorSpace, kCGImageAlphaPremultipliedLast);
     CGColorSpaceRelease(colorSpace);

     CGContextTranslateCTM(offscreenBuffer, 0, self.bounds.size.height);
     CGContextScaleCTM(offscreenBuffer, 1.0, -1.0);
}


-(void)drawToBuffer:(CGPoint)coordA :(CGPoint)coordB :(UIColor *)penColor :(int)thickness {

     CGContextBeginPath(offscreenBuffer);
     CGContextMoveToPoint(offscreenBuffer, coordA.x,coordA.y);
     CGContextAddLineToPoint(offscreenBuffer, coordB.x,coordB.y);
     CGContextSetLineWidth(offscreenBuffer, thickness);
     CGContextSetLineCap(offscreenBuffer, kCGLineCapRound);
     CGContextSetStrokeColorWithColor(offscreenBuffer, [penColor CGColor]);
     CGContextStrokePath(offscreenBuffer);

}

- (void)drawRect:(CGRect)rect {
    CGImageRef cgImage = CGBitmapContextCreateImage(offscreenBuffer);
    UIImage *image =[[UIImage alloc] initWithCGImage:cgImage];
    CGImageRelease(cgImage);
    [image drawInRect:self.bounds];

}

Отлично работает на симуляторе, но не на устройстве, я думаю, это как-то связано со скоростью процессора.

Я использую АРК.

5
задан Eager Logic 29 June 2012 в 12:12
поделиться