Я делаю простую программу для рисования на iPhone в качестве личного побочного проекта.
Я фиксирую событие прикосновения в подклассе UIView и отображаю фактический материал в отдельном CGLayer. После каждого рендеринга я вызываю [self setNeedsLayout], а в методе drawRect: я рисую CGLayer в контексте экрана.
Все это прекрасно работает и прилично работает для рисования прямоугольников. Тем не менее, я просто хочу простой режим "от руки", как и многие другие приложения для iPhone.
Я подумал сделать это, создав CGMutablePath, и просто:
CGMutablePathRef path;
-(void)touchBegan {
path = CGMutablePathCreate();
}
-(void)touchMoved {
CGPathMoveToPoint(path,NULL,x,y);
CGPathAddLineToPoint(path,NULL,x,y);
}
-(void)drawRect:(CGContextRef)context {
CGContextBeginPath(context);
CGContextAddPath(context,path);
CGContextStrokePath(context);
}
Тем не менее, после рисования в течение более 1 секунды, производительность ухудшается ужасно.
Я бы просто нарисовал каждую линию в CGLayer за пределами экрана, если бы не переменная непрозрачность! Непрозрачность менее 100% приводит к тому, что на экране остаются точки, соединяющие линии. Я посмотрел на CGContextSetBlendingMode (), но, увы, не могу найти ответ.
Может ли кто-нибудь указать мне правильное направление? Другие приложения для iPhone могут делать это с очень хорошей эффективностью.