在给定矩形的CATiledLayer中绘制图像

问题描述:

我正在尝试绘制图像并放置到CATiledLayer中,并且图块大小为512x512。唯一的问题是,最后的瓷砖在较小的瓷砖内缩小。提供的图像宽度和高度不是512的倍数。因此,使其成为512的倍数所需的其余部分填充有黑色填充。在给定矩形的CATiledLayer中绘制图像

How it's seen How i need

我的抽奖代码:

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]; 
    } 
} 

我通过删除线固定这一点。它结合了两个方面。

tileRect = CGRectIntersection(self.bounds, tileRect);