Итак, у меня есть базовое приложение для рисования, которое позволяет мне рисовать линии. Я рисую растровое изображение вне экрана, а затем представляю изображение в 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];
}
Отлично работает на симуляторе, но не на устройстве, я полагаю, что это как-то связано со скоростью процессора.
Я использую ARC.
[self setNeedsDisplay];
или[self setNeedsDisplayInRect:rect];
в методе, который рисует линию, может ускорить обновление? - person Rich Tolley   schedule 30.06.2012[image drawInRect:self.bounds];
- person Eager Logic   schedule 02.07.2012