Итак, у меня есть базовое приложение для рисования, которое позволяет мне рисовать линии. Я рисую внеэкранное растровое изображение, а затем представляю изображение в 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];
}
Отлично работает на симуляторе, но не на устройстве, я думаю, это как-то связано со скоростью процессора.
Я использую АРК.