У меня есть большой UIScrollView
, который содержит CATiledLayer
, который я использую, чтобы сделать плитки гораздо больше в drawRect:
, как это:CATiledLayer, CGContextDrawImage и CGContextTranslateCTM
- (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:], но это рисует строки в обратном порядке, которые зажимают большее изображение.
Что я делаю неправильно с переводом?
EDIT: Перемещено сохранение/восстановление и преобразование из цикла, как было предложено, но оно все еще ничего не рисует.
Я не понимал, что есть свойство geomtryFlipped, которое очень помогло, спасибо. Я также обновил tileSize, чтобы уменьшить код и устранить цикл, и он выглядит великолепно. – JWood