У меня есть большой UIScrollView
, который содержит CATiledLayer
, который я использую для рисования тайлов гораздо большего размера в drawRect:
, например:
- (void)drawRect:(CGRect)rect {
int firstCol = floorf(CGRectGetMinX(rect) / tileSize);
int lastCol = floorf((CGRectGetMaxX(rect)-1) / tileSize);
int firstRow = floorf(CGRectGetMinY(rect) / tileSize);
int lastRow = floorf((CGRectGetMaxY(rect)-1) / tileSize);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0, tileSize);
CGContextScaleCTM(context, 1.0, -1.0);
for( int row = firstRow; row <= lastRow; row++ ) {
for( int col = firstCol; col <= lastCol; col++ ) {
UIImage = [self getTileWithRow:row column:col];
CGRect tileRect = CGRectMake((col * tileSize),
row * tileSize),
tileSize, tileSize);
CGContextTranslateCTM(context, 0, tileRect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, tileRect, tile.CGImage);
}
}
CGContextRestoreGState(context);
}
Это работает, когда я закомментирую вызовы CGContextSaveGState
, CGContextSaveGState
, CGContextScaleCTM
и CGContextRestoreGState
, но изображения перевернуты. При наличии вызовов изображение не рисуется вообще. Я мог бы использовать [tile drawInRect:], но это рисует строки в обратном направлении, что приводит к увеличению размера изображения.
Что я делаю не так с переводом?
РЕДАКТИРОВАТЬ: перемещены сохранить / восстановить и преобразовать из цикла, как предложено, но он по-прежнему ничего не рисует.