我有一个大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