Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用给定的矩形在CATiledLayer中绘制图像_Ios_Objective C_Calayer_Catiledlayer - Fatal编程技术网

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

Ios 使用给定的矩形在CATiledLayer中绘制图像,ios,objective-c,calayer,catiledlayer,Ios,Objective C,Calayer,Catiledlayer,我正在尝试绘制和图像到CATiledLayer,瓷砖大小为512x512。唯一的问题是,最后一块瓷砖在较小的瓷砖内部收缩。提供的图像宽度和高度不是512的倍数。因此,使其成为512的倍数所需的剩余部分用黑色填充物填充 我的绘图代码: CGContextRef context = UIGraphicsGetCurrentContext(); CGFloat _scaleX = CGContextGetCTM(context).a; CGFloat _scaleY = CGContextGet

我正在尝试绘制和图像到CATiledLayer,瓷砖大小为512x512。唯一的问题是,最后一块瓷砖在较小的瓷砖内部收缩。提供的图像宽度和高度不是512的倍数。因此,使其成为512的倍数所需的剩余部分用黑色填充物填充

我的绘图代码:

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];
    }
}
CGContextRef context=UIGraphicsGetCurrentContext();
CGFloat _scaleX=CGContextGetCTM(context).a;
CGFloat _scaleY=CGContextGetCTM(context).d;
CATiledLayer*平铺层=(CATiledLayer*)[自层];
CGSize tileSize=tiledLayer.tileSize;
tileSize.width/=\u scaleX;
tileSize.height/=-\u scaleY;
NSInteger firstCol=地板(CGRectGetMinX(rect)/tileSize.宽度);
NSInteger lastCol=地板((CGRectGetMaxX(rect)-1)/瓷砖尺寸宽度);
NSInteger firstRow=地板(CGRectGetMinY(rect)/tileSize.高度);
NSInteger lastRow=地板((CGRectGetMaxY(rect)-1)/tileSize.height);
NSInteger level=self.maxLevelOfDetail+roundf(log2f(_scaleX));
_currentZoomLevel=级别;

对于(NSInteger row=firstRow;row我通过删除一行来修复这个问题。该行组合了两个矩形

tileRect = CGRectIntersection(self.bounds, tileRect);

我通过删除一行来修复这个问题。这行组合了两个矩形

tileRect = CGRectIntersection(self.bounds, tileRect);