У меня есть приложение, которое позволяет пользователю рисовать изображение, чтобы в конечном итоге обрезать его до пройденного пути. К сожалению, хотя это очень медленно. Причина в том, что он использует [self setNeedsDisplay]
, чтобы обновить UIBezierPath, что также приводит к перерисовке изображения и затрудняет работу. Есть ли способ реализовать это без перерисовки UIImage при каждом вызове setNeedsDisplay
? Или лучший способ реализовать всю вещь? Вся помощь приветствуется! Ниже мой UIView подкласс:Подкласс UIView redraw UIBezierPath без перерисовки всего изображения
#import "DrawView.h"
@implementation DrawView
{
UIBezierPath *path;
}
- (id)initWithCoder:(NSCoder *)aDecoder // (1)
{
if (self = [super initWithCoder:aDecoder])
{
[self setMultipleTouchEnabled:NO]; // (2)
[self setBackgroundColor:[UIColor whiteColor]];
path = [UIBezierPath bezierPath];
[path setLineWidth:2.0];
}
return self;
}
- (void)drawRect:(CGRect)rect // (5)
{
[self.EditImage drawInRect:self.bounds];
[[UIColor blackColor] setStroke];
[path stroke];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint p = [touch locationInView:self];
[path moveToPoint:p];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint p = [touch locationInView:self];
[path addLineToPoint:p]; // (4)
[self setNeedsDisplay];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[self touchesMoved:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[self touchesEnded:touches withEvent:event];
}
@end
Это сработало! Спасибо!!!! –