我有一個大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:],但是會反向繪製行,從而將較大的圖像擰緊。
我在做什麼錯誤的翻譯?
編輯:按照建議移動保存/恢復並轉換出循環,但它仍然沒有繪製任何東西。
我沒有意識到有一個geomtryFlipped屬性,這已經幫助了很多,謝謝。我還更新了tileSize以減少代碼並消除循環,並且它看起來很棒。 – JWood 2012-01-09 15:11:09