2017-10-05 3 views
1

Ich versuche, in CATiledLayer zu zeichnen und zu zeichnen, mit Kachelgröße 512x512. Einziges Problem ist, dass die letzten Kacheln innerhalb der kleineren Kacheln geschrumpft sind. Die Bildbreite und -höhe sind keine Vielfachen von 512. Daher ist der verbleibende Teil, der erforderlich ist, um ein Vielfaches von 512 zu machen, mit einem schwarzen Füllstück gefüllt.Bild in CATiledLayer mit gegebenem rect zeichnen

How it's seen How i need

Mein Zieh Code:

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

Antwort

0

Ich reparierte dies durch eine Linie zu entfernen. Was zwei Retrakte kombiniert.

tileRect = CGRectIntersection(self.bounds, tileRect); 
Verwandte Themen