Как быстрее нарисовать 6 замаскированных изображений, чтобы при просмотре таблицы не замедлялся

Дело в том, что у меня есть этот пользовательский вид (3 из них) в моей одной ячейке, и он делает много отсечения и рендеринга изображений... Мне действительно нужно, чтобы сделать это быстрее.

В моем drawRect:

[super drawRect:rect];

CGContextRef contextRef = UIGraphicsGetCurrentContext();

CGFloat spacer = 1.5;
if(_type == DPClippedImageViewTypeTopLeft){
    CGContextMoveToPoint(contextRef, rect.origin.x, rect.origin.y); //top left
    CGContextAddLineToPoint(contextRef, rect.origin.x, rect.origin.y);  //top left
    CGContextAddLineToPoint(contextRef, rect.origin.x + (rect.size.width) - spacer, rect.origin.y); //top right
    CGContextAddLineToPoint(contextRef, rect.origin.x, rect.origin.y + (rect.size.height) - spacer); //bottom left
    CGContextAddLineToPoint(contextRef, rect.origin.x, rect.origin.y); //top left
}
else if(_type == DPClippedImageViewTypeBottomRight){
    CGContextMoveToPoint(contextRef, rect.origin.x + (rect.size.width), rect.origin.y + spacer); //top right
    CGContextAddLineToPoint(contextRef, rect.origin.x + (rect.size.width), rect.origin.y + spacer); //top right
    CGContextAddLineToPoint(contextRef, rect.origin.x + (rect.size.width), rect.origin.y + (rect.size.height)); //bottom right
    CGContextAddLineToPoint(contextRef, rect.origin.x + spacer, rect.origin.y + (rect.size.height)); //bottom left
    CGContextAddLineToPoint(contextRef, rect.origin.x + (rect.size.width), rect.origin.y + spacer); //top right
}
else{
    CGContextMoveToPoint(contextRef, rect.origin.x, rect.origin.y);
    CGContextAddLineToPoint(contextRef, rect.origin.x, rect.origin.y);
    CGContextAddLineToPoint(contextRef, rect.origin.x, rect.origin.y + (rect.size.height));
    CGContextAddLineToPoint(contextRef, rect.origin.x + (rect.size.width), rect.origin.y + (rect.size.height));
    CGContextAddLineToPoint(contextRef, rect.origin.x + (rect.size.width), rect.origin.y);
    CGContextAddLineToPoint(contextRef, rect.origin.x, rect.origin.y);
}

// clip context to current path
CGContextClip(contextRef);

CGContextSaveGState(contextRef);

if(_type == DPClippedImageViewTypeTopLeft){
    CGContextTranslateCTM(contextRef, -rect.size.width*2.0/3.0, -rect.size.height*3.0/5.0);
}
else if (_type == DPClippedImageViewTypeBottomRight){
    CGContextTranslateCTM(contextRef, -rect.size.width*1.0/3.0, -rect.size.height*2.0/5.0);
}

CGFloat scale = (_type != DPClippedImageViewTypeNone) ? 2.0 : 1.0;
CGContextScaleCTM(contextRef, scale, scale);

// draw image
[_image drawInRect:rect];

CGContextRestoreGState(contextRef);

Теперь у меня есть 3 из этих вещей на ячейку, и даже с переработкой, все еще нужно определить, какую часть изображения нарисовать и нарисовать...

Я действительно не могу придумать способ ускорить это:(Любая помощь очень ценится!

Результат - 2 изображения. Один - это прямоугольный треугольник с прямым углом вверху слева, другой - прямоугольный треугольник с прямым углом внизу справа.

0 ответов

Другие вопросы по тегам