1
タイルサイズ512x512のCATiledLayerに描画して画像を描画しようとしています。問題は、最後のタイルが小さなタイルの内側で収縮していることだけです。提供される画像の幅と高さは512の倍数ではありません。したがって、512の倍数にするために必要な残りの部分は黒い詰め物で埋められます。指定した矩形でCATiledLayerに画像を描画します。
マイドローコード:
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat _scaleX = CGContextGetCTM(context).a;
CGFloat _scaleY = CGContextGetCTM(context).d;
CATiledLayer *tiledLayer = (CATiledLayer *) [self layer];
CGSize tileSize = tiledLayer.tileSize;
tileSize.width /= _scaleX;
tileSize.height /= -_scaleY;
NSInteger firstCol = floor(CGRectGetMinX(rect)/tileSize.width);
NSInteger lastCol = floor((CGRectGetMaxX(rect) - 1)/tileSize.width);
NSInteger firstRow = floorf(CGRectGetMinY(rect)/tileSize.height);
NSInteger lastRow = floorf((CGRectGetMaxY(rect) - 1)/tileSize.height);
NSInteger level = self.maxLevelOfDetail + roundf(log2f(_scaleX));
_currentZoomLevel = level;
for (NSInteger row = firstRow; row <= lastRow; row++) {
for (NSInteger col = firstCol; col <= lastCol; col++) {
CGRect tileRect = CGRectMake(tileSize.width * col, tileSize.height * row, tileSize.width, tileSize.height);
UIImage *tileImage = [self.dataSource tiledImageView:self imageTileForLevel:level x:col y:row];
Tile *tile = [self.tileCache objectForKey:tileCacheKey];
[tile drawInRect:tile.tileRect blendMode:kCGBlendModeNormal alpha:1];
}
}