Учитывая UIImage
и a CGRect
, какой наиболее эффективный способ (в памяти и времени) нарисовать часть изображения, соответствующую CGRect
(без масштабирования)?
Для справки, вот как я это делаю сейчас:
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect frameRect = CGRectMake(frameOrigin.x + rect.origin.x, frameOrigin.y + rect.origin.y, rect.size.width, rect.size.height);
CGImageRef imageRef = CGImageCreateWithImageInRect(image_.CGImage, frameRect);
CGContextTranslateCTM(context, 0, rect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, rect, imageRef);
CGImageRelease(imageRef);
}
К сожалению, это кажется очень медленным с изображениями среднего размера и высокой частотой setNeedsDisplay
. Игра с рамкой UIImageView
и clipToBounds
дает лучшие результаты (с меньшей гибкостью).