2017-10-05 16 views
1

タイルサイズ512x512のCATiledLayerに描画して画像を描画しようとしています。問題は、最後のタイルが小さなタイルの内側で収縮していることだけです。提供される画像の幅と高さは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]; 
    } 
} 

答えて

0

私は行を削除することによって、これを修正しました。 2つの矩形を組み合わせたもの。

tileRect = CGRectIntersection(self.bounds, tileRect); 
関連する問題